学生管理系统开发

来源:互联网 发布:mac图片导出到硬盘 编辑:程序博客网 时间:2024/06/05 01:03

/*  

*Copyright  (c)2017,烟台大学计算机与控制工程学院      

*All rights reservrd.           

*作者:李欣豪 

*完成时间:2017年12月21日      

*版本号:v1.0      

*问题描述:

学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:
(1)系统以菜单方式工作
(2)学生信息录入功能(学生信息用文件保存)
(3)学生信息浏览功能---输出
(4)查询、排序功能
     按学号查询
     按姓名查询
(5)学生信息的删除与修改


流程图:


一、头文件

/************************************************************ 版权所有 (C)2017, LiXinhao。** 文件名称: guanli.h* 文件标识:无* 内容摘要:该代码用于函数声明及结构体构建* 其它说明:无* 当前版本: V1.0* 作 者:李欣豪* 完成日期: 20171220** 修改记录1:* 修改日期: 20171221* 版本号: V1.0* 修改人: LiXinhao* 修改内容:创建**********************************************************/

#ifndef LINKLIST_H_INCLUDED#define LINKLIST_H_INCLUDEDtypedef struct student{char number[20];   //学号nu    char name[20];   //姓名namint age;   //年龄agchar sex;   //性别sint score;   //成绩 scchar address[20];   //地址addchar call[20];   //电话cachar mail[20];  //E-mail ma}stu;typedef struct LNode        //定义单链表结点类型{    stu data;    struct LNode *next;     //指向后继结点}LinkList;void InitList(LinkList *&L);//初始化链表void ListInsert(LinkList *&L,LinkList *P);//插入新的节点void addstu(LinkList *&L);//增加新的学生void display(LinkList *&L); //浏览全部学生信息void deletestu(LinkList *L); //删除某个学生信息void changestu(LinkList *L);  //修改学生信息void findstu(LinkList *L);   //按照学号查找学生信息void findstu2(LinkList *L);   //按照姓名查找学生信息void paixu(LinkList *L);   //按成绩排序排序 并输出排序后的结果void saveStuDentFile(LinkList * &L);   //保存学生信息到文件#endif // LINKLIST_H_INCLUDED

二、源文件

/************************************************************ 版权所有 (C)2017, LiXinhao。** 文件名称: guanli.cpp* 文件标识:无* 内容摘要:该代码用于函数的定义* 其它说明:无* 当前版本: V1.0* 作 者:李欣豪* 完成日期: 20171220** 修改记录1:* 修改日期: 20171221* 版本号: V1.0* 修改人: LiXinhao* 修改内容:创建**********************************************************/

#include <stdio.h>#include <malloc.h>#include <iostream>#include "guanli.h"using namespace std;char nam[20];//名字  char nu[20];//学号  char s;//性别  int ag;//年龄  char ca[20];//电话      int sc;//成绩char add[20];//地址char ma[20];//E-mail  /********************************************************** 功能描述:初始化链表* 输入参数: 无* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void InitList( LinkList *&L)//初始化链表  {      L=(LinkList *)malloc(sizeof(LinkList));      strcpy(L->data.number,"xx");//把后者的内容拷贝到前者中      strcpy(L->data.name,"xx");//把后者的内容拷贝到前者中      L->data.sex=0;      L->data.age=0;      strcpy(L->data.call,"xx");//把后者的内容拷贝到前者中      L->data.score=0;      strcpy(L->data.address,"xx");      strcpy(L->data.mail,"xx");      L->next=NULL;  }  /********************************************************** 功能描述:插入新的节点* 输入参数: 无* 输出参数: 无* 返回值:无* 其它说明:调用了初始化链表函数************************************************************/void ListInsert(LinkList *&L,LinkList *p)//插入新的节点{LinkList *q=NULL;q=L;if(q->next==NULL){q->next=p;p->next=NULL;}else{p->next=q->next;q->next=p;}}/********************************************************** 功能描述:增加新的学生* 输入参数: nu 学号;nam 姓名;s 性别;ag 年龄;ca 电话;sc 成绩;add 地址;ma E-mail* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void addstu(LinkList *&L)//增加新的学生  {       printf("请输入学生的信息:\n");      printf("学号:");      scanf("%s",nu);       LinkList *q=L->next;      while(q!=NULL )      {             if(strcmp(q->data.number,nu)==0)          {              printf("该生已存在\n");              break;           }                     q=q->next;      }      if(q==NULL)      {          LinkList *p;          InitList(p);          strcpy(p->data.number,nu);//把后者的内容拷贝到前者中          printf("姓名:") ;          scanf("%s",nam) ;         // printf("%s\n",nam);          strcpy(p->data.name,nam);//把后者的内容拷贝到前者中          printf("性别:(w为男 m为女)");          scanf(" %c",&s);           //printf("%c\n",s);          p->data.sex=s;         printf("年龄:");          scanf("%d",&ag);         // printf("%d\n",ag);          p->data.age=ag;            printf("电话号码:");          scanf("%s",ca);          //printf("%s\n",ph);          strcpy(p->data.call,ca);printf("成绩:");          scanf("%d",&sc);            p->data.score=sc;          printf("地址:");          scanf("%s",add);          //printf("%s\n",add);          strcpy(p->data.address,add);printf("E-mail:");          scanf("%s",ma);          //printf("%s\n",ma);          strcpy(p->data.mail,ma);ListInsert(L,p);saveStuDentFile(L);//保存学生信息到文件    } }/********************************************************** 功能描述:浏览全部学生信息* 输入参数: 无* 输出参数: q->data.number,q->data.name,q->data.age,q->data.sex,          q->data.call,q->data.score,q->data.address,q->data.mail* 返回值: 无* 其它说明:无************************************************************/void display(LinkList *&L)//浏览全部学生信息   {      LinkList *q=L->next;      if(q==NULL)      {          printf("还没有学生信息,请增加学生信息\n");          return;      }      while(q!=NULL)      {                  printf(" 学号:%s 名字:%s 年龄:%d 性别:%c 电话号码:%s  成绩:%d  地址: %s  E-mail:%s \n",q->data.number,q->data.name,q->data.age,q->data.sex,          q->data.call,q->data.score,q->data.address,q->data.mail);          q=q->next;      }  } /********************************************************** 功能描述:删除某个学生* 输入参数: nu 学号* 输出参数:无* 返回值: 无* 其它说明:无************************************************************/void deletestu(LinkList *L)       //删除某个学生  {      printf("请输入您要删除的学生的学号:");      scanf("%s",nu);      LinkList *p,*pre;      if(L->next==NULL)      {          printf("还没有学生信息,请增加学生信息\n");  return;              }    pre=L;      p=pre->next;      int j=0;      while(p!=NULL)      {           if(strcmp(p->data.number,nu)==0)         {                 j=1;                   pre->next =p->next;                   free(p);                   p=NULL;                 printf("删除学生成功\n");  saveStuDentFile(L);//保存学生信息到文件                 break;           }           pre=p;           p=p->next;     }      if(j==0)         printf("该生不存在\n");  }  /********************************************************** 功能描述:改变学生信息* 输入参数: nu 学号 nam 名字 ca 电话;sc成绩;ag年龄* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void changestu(LinkList *L)//改变学生信息  {      int j=1;        printf("请输入您要修改学生的学号:\n");      scanf("%s",nu);      LinkList *q=L->next;        while(q!=NULL )      {          if(strcmp(q->data.number,nu)==0)          {              j=0;              printf("请输入您要修改的信息选项:1.姓名 2. 电话号码 3. 成绩  4.年龄   \n");              int n;              scanf("%d",&n);              switch(n)              {              case 1:                  printf("请输入您要修改的名字:");                  scanf("%s",nam);                  printf("修改的名字为:%s\n",nam);                  strcpy(q->data.name,nam);//把后者的内容拷贝到前者中                  printf("修改名字成功!\n");saveStuDentFile(L);//保存学生信息到文件                break;            case 2:                printf("请输入您要修改的电话号码:");                  scanf("%s",ca);                  printf("修改的电话号码为:%s\n",ca);                  strcpy(q->data.call,ca);//把后者的内容拷贝到前者中                  printf("修改电话号码成功!\n"); saveStuDentFile(L);//保存学生信息到文件                break;              case 3:                printf("请输入您要修改的成绩");                  scanf("%d",&sc);                  printf("修改的总成绩为:%d\n",sc);                  q->data.score=sc;                  printf("修改成绩成功!\n");  saveStuDentFile(L);//保存学生信息到文件                break;              case 4:                printf("请输入您要修改的年龄:");                  scanf("%d",&ag);                  printf("修改的年龄为:%d\n",ag);                  q->data.age=ag;                  printf("修改年龄成功!\n"); saveStuDentFile(L);//保存学生信息到文件                break;              default :                  printf("请输入正确的选项\n");                  break;              }          }          q=q->next;      }     if(j==1)     {       printf("该生不存在\n");     }    } /********************************************************** 功能描述:按学号查找学生并输出该生信息* 输入参数: nu学号* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void findstu(LinkList *L)  //按学号查找学生并输出该生信息  {      printf("请输入您要查找的学生的学号:");      scanf("%s",nu);      LinkList *q=L->next;      while(q!=NULL )      {          if(strcmp(q->data.number,nu)==0)          {              printf("姓名:%s\n",q->data.name);              printf("学号:%s\n",q->data.number);              printf("性别:%c\n",q->data.sex);              printf("年龄:%d\n",q->data.age);              printf("电话号码:%s\n",q->data.call);              printf("成绩:%d\n",q->data.score);              printf("地址:%s\n",q->data.address);              printf("E-mail:%s\n",q->data.mail);              break;          }            q=q->next;      }      if(q==NULL)          printf("该生不存在\n");  }  /********************************************************** 功能描述:按姓名查找学生并输出该生信息* 输入参数: nam姓名* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void findstu2(LinkList *L)  //按姓名查找学生并输出该生信息  {      printf("请输入您要查找的学生的姓名:");      scanf("%s",nam);      LinkList *q=L->next;      while(q!=NULL )      {          if(strcmp(q->data.name,nam)==0)          {              printf("姓名:%s\n",q->data.name);              printf("学号:%s\n",q->data.number);              printf("性别:%c\n",q->data.sex);              printf("年龄:%d\n",q->data.age);              printf("电话号码:%s\n",q->data.call);              printf("成绩:%d\n",q->data.score);              printf("地址:%s\n",q->data.address);              printf("E-mail:%s\n",q->data.mail);              break;          }            q=q->next;      }      if(q==NULL)          printf("该生不存在\n");  }  /********************************************************** 功能描述:按成绩排序排序 并输出排序后的结果* 输入参数: 无* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void paixu(LinkList *L)//按成绩排序排序 并输出排序后的结果   {      LinkList *q,*p,*r=L->next;      if(r==NULL)      {          printf("还没有学生信息,请增加学生信息\n");          return;      }      while(r) //两层循环完成排序       {           p=r;           q=r->next;           LinkList *tmp;//用于排序时暂存节点            InitList(tmp);           while(q)           {               if(q->data.score > p->data.score)               {                  /*先复制q结点信息到tmp*/                  strcpy(tmp->data.number,q->data.number);                  strcpy(tmp->data.name,q->data.name);                  strcpy(tmp->data.call,q->data.call);                  tmp->data.sex=q->data.sex;                  tmp->data.age=q->data.age; strcpy(tmp->data.address,q->data.address);                tmp->data.score=q->data.score;                  strcpy(tmp->data.mail,q->data.mail);                /*再复制p结点信息到q*/                  strcpy(q->data.number,p->data.number);                  strcpy(q->data.name,p->data.name);                  strcpy(q->data.call,p->data.call);                  q->data.sex=p->data.sex;                               q->data.age=p->data.age;                  strcpy(q->data.address,p->data.address);                  q->data.score=p->data.score;                  strcpy(q->data.mail,p->data.mail);                  /*最后复制exchange结点信息到p*/                  strcpy(p->data.number,tmp->data.number);                  strcpy(p->data.name,tmp->data.name);                  strcpy(p->data.call,tmp->data.call);                  p->data.sex=tmp->data.sex;                               p->data.age=tmp->data.age;                  strcpy(p->data.address,tmp->data.address);                  p->data.score=tmp->data.score;                  strcpy(p->data.mail,tmp->data.mail);              }               q=q->next;           }           r=r->next;      }saveStuDentFile(L);//保存学生信息到文件    printf("排序后的学生信息是:\n");      display(L);   }  /********************************************************** 功能描述:保存学生信息到文件* 输入参数: 无* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void saveStuDentFile(LinkList * &L)//保存学生信息到文件  {      FILE *fp;      //WORK*p;      //p = worker;      LinkList *p=L->next;      if((fp=fopen("student.txt","w"))==NULL)// 以可写的方式打开当前目录下的.txt      {          printf("无法打开文件,按任意键退出!");          exit(1);      }      //  fprintf(fp,"学号   姓名   性别   年龄   电话    成绩  地址    E-mail\n");      while(p)      {          //printf("*******\n");          //display(p);          fprintf(fp,"%s  %s  %c  %d  %s  %d  %s  %s\n",p->data.number,p->data.name,p->data.sex,p->data.age,p->data.call,p->data.score,p->data.address,p->data.mail);          p=p->next;      }      fclose(fp);  }  


/************************************************************ 版权所有 (C)2017, LiXinhao。** 文件名称: main.cpp* 文件标识:无* 内容摘要:该代码用于功能的实现* 其它说明:无* 当前版本: V1.0* 作 者:李欣豪* 完成日期: 20171220** 修改记录1:* 修改日期: 20171221* 版本号: V1.0* 修改人: LiXinhao* 修改内容:创建**********************************************************/


#include <stdio.h>#include <malloc.h>#include <iostream>#include "guanli.h"using namespace std;/********************************************************** 功能描述:管理员登录,功能的选择* 输入参数: x 管理员密码;n功能的选择* 输出参数: 无* 返回值: 0* 其它说明:无************************************************************/int main(){LinkList *L;InitList(L);cout<<"请输入管理员密码:";char x[20];scanf("%s",x);if(strcmp(x,"0816")==0){while(1){cout<<"**********   欢迎使用学生信息管理平台   **********"<<endl;cout<<endl;cout<<endl;    cout<<"(1)学生信息录入"<<endl;    cout<<"(2)学生信息浏览"<<endl;    cout<<"(3)排序"<<endl;    cout<<"(4)按学号查询"<<endl;    cout<<"(5)按姓名查询"<<endl;    cout<<"(6)学生信息删除"<<endl;    cout<<"(7)学生信息修改"<<endl;cout<<"请输入您需要的选项:";    int n;cin>>n;switch(n){case 1:{                    addstu(L);        cout<<"信息录入成功!"<<endl;break;}case 2:{display(L);break;}case 3:{paixu(L);break;}case 4:{findstu(L);break;}case 5:{findstu2(L);break;}case 6:{deletestu(L);break;}case 7:{changestu(L);break;}}}}else{cout<<"密码错误!"<<endl;}    return 0;}


三、运行结果截图

功能一:



功能二:



功能三:


功能四:



功能五:



功能六:



功能七:



文件中的存储: