1、- -#include#include#include#include#include#define LEN sizeof(struct student)#define DAT_FILENAME Information.txt/*定义数据构造*/struct dateint year;int month;int day;struct studentint ID;char Name8;int age;char xb;char telephone15;char address40;struct date birthday;char email40;struct student *next;/*函数
2、原型*/void DispMainMenu();void DisplayInformation(struct student *head);struct student *FindstudentID(struct student *head,int findID);struct student *FindstudentName(struct student *head,char findname);struct student *InformationInput(struct student *head);void QueryInformation(struct student *head);
3、struct student *EditInformation(struct student *head);struct student *Insert(struct student *head,struct student *p);void Save(struct student *head);struct student *Read(struct student *head);struct student *Delete(struct student *head,int findID);struct student *Add(struct student *head);void Help(
4、);/*显示主菜单*/void DispMainMenu()printf(*学生信息管理系统*n);printf(n);printf(tttt1-信息录入n);printf(n);printf(tttt2-信息修改n);printf(n);printf(tttt3-信息查询n);printf(n);printf(tttt4-保存数据到文件n);printf(n);printf(tttt5-翻开数据文件n);printf(n);printf(tttt6-文件追加n);printf(n);printf(tttt7-帮助n);printf(n);printf(tttt0-退出n);printf(n)
5、;printf(友情提示:初次使用请先阅读帮助n);printf(*n);printf(请选择(0-7):);/*显示主菜单*/*帮助*/void Help()printf(nttt欢送进入帮助系统!nn); printf(t1.请按照主菜单提示选择所需执行功能的数字代号!n);printf(t2.所有文件请按照规输入n);printf(t3.刚开场执行程序时假设需要文本文件里的数据,请先进展读取文件信息!n);printf(t4.修改信息以后,请切记需要保存!n);printf(n);/*显示所有学生信息*/void DisplayInformation(struct student *he
6、ad)struct student *p;printf(*);printf(n学号tt年龄t性别t tt地址t 出生年月t emailn);p=(struct student *)malloc(LEN);p=head;if(head!=NULL)while(p!=NULL)printf(%-dt%-st%-dt,p-ID,p-Name,p-age);printf(%-ct%-st%-st,p-xb,p-telephone,p-address);printf(%-d %d %d,p-birthday.year,p-birthday.month,p-birthday.day);printf(t%-
7、sn,p-email);p=p-next;elseprintf(无数据n);/*查找指定学号的学生信息*/struct student *FindstudentID(struct student *head,int findID)struct student *p;p=(struct student *)malloc(LEN);p=head;if(head!=NULL)while(p!=NULL)if(p-ID=findID)break;p=p-next;elseprintf(无数据n);return p;/*查找指定的学生信息*/struct student *FindstudentName
8、(struct student *head,char findname)struct student *p;p=(struct student *)malloc(LEN);p=head;if(head!=NULL)while(p!=NULL)if(strcmp(p-Name,findname)=0)break;p=p-next;elseprintf(无数据n);return p;/*学生信息录入*/struct student *InformationInput(struct student *head)int number,i;struct student *p;p=(struct stud
9、ent *)malloc(LEN);printf(n请输入本次录入的学生人数:);scanf(%d,&number);for(i=0;iID);printf(ttt :t);scanf(%s,p-Name);printf(ttt 年龄:t);scanf(%d,&p-age);printf(ttt 性别(男M、女W):);scanf(%s,&p-xb);printf(ttt (八位):t);scanf(%s,p-telephone);printf(ttt 地址:t);scanf(%s,p-address);printf(ttt 出生年月:t);scanf(%d%d%d,&p-birthday.y
10、ear,&p-birthday.month,&p-birthday.day);printf(tttemail:t);scanf(%s,p-email);head=Insert(head,p);p=(struct student *)malloc(LEN);printf(n 您的输入信息是:n);DisplayInformation(head);return(head);/*学生信息查询*/void QueryInformation(struct student *head)char select;int findID;char findname8;struct student *p;print
11、f(*请选择查询方式*n);printf(t1-按学号查询;t2-按查询n);printf(*n);printf(请选择(1-2):);/*显示菜单信息*/select=getche();getch();switch (select)case1:printf(n 按学号查询n 请输入学生的学号:);scanf(%d,&findID);if(p=FindstudentID(head,findID)!=NULL) /*找到指定学号的学生*/printf(n 查找结果如下:n);printf(n学号tt年龄t性别t tt地址t 出生年月t emailn);printf(%dt%st%dt,p-ID,
12、p-Name,p-age);printf(%ct%st%st,p-xb,p-telephone,p-address);printf(%d %d %d,p-birthday.year,p-birthday.month,p-birthday.day);printf(t%sn,p-email);else /*没有找到*/printf(您输入的学号不存在!n);break;case2:printf(n 按查询n 请输入学生的:);scanf(%s,&findname);if(p=FindstudentName(head,findname)!=NULL) /*找到指定的学生*/printf(n 查找结果
13、如下:n);printf(n 学号t t 年龄t 性别t t 地址t 出生年月t emailn);printf(%dt%st%dt,p-ID,p-Name,p-age);printf(%ct%st%st,p-xb,p-telephone,p-address);printf(%d %d %d,p-birthday.year,p-birthday.month,p-birthday.day);printf(t%sn,p-email);else /*没有找到*/printf(您输入的不存在!n);break;default:printf(选择错误!n);/*修改学生信息*/struct student
14、 *EditInformation(struct student *head)int findID;char select;struct student *p;printf(n 请输入学生的学号:);scanf(%d,&findID);if(p=FindstudentID(head,findID)!=NULL) /*找到指定学号的学生*/printf(*请修改方式*n);printf(t1-修改信息;t2-删除信息n);printf(*n);printf(请选择(1-2):);select=getche();getch();switch (select)case1: /*修改信息*/print
15、f(您选择的是修改信息!n);printf(姓 名:%sn,p-Name);printf(原信息:学号:%dt 年龄:%dt 性别:%cn,p-ID,p-age,p-xb);printf(t :%st 地址:%stemail:%sn,p-telephone,p-address,p-email);printf(请输入新信息n);printf(学号t);scanf(%d,&p-ID);printf(:t);scanf(%s,p-Name);printf(年龄:t);scanf(%d,&p-age);printf(性别(男M、女W):);scanf(%s,&p-xb);printf(:t);scan
16、f(%s,p-telephone);printf(地址:t);scanf(%s,p-address);printf(出生年月:t);scanf(%d%d%d,&p-birthday.year,&p-birthday.month,&p-birthday.day);printf(email:t);scanf(%s,p-email);break;case2: /*删除信息*/printf(您选择的是删除信息!n);head=Delete(head,findID);break;else /*没有找到学号匹配的记录*/printf(您输入的学号不存在!n);return (head);/*有序插入*/s
17、truct student *Insert(struct student *head,struct student *p)struct student *p0,*p1;if(head=NULL)head=p;p-next=NULL;return(head);if(p-IDID)p-next=head;head=p;return(head);p1=head;while(p-IDp1-ID)&(p1-next!=NULL)p0=p1;p1=p1-next;if(p-IDID)p-next=p1;p0-next=p;elseif(p-ID=p1-ID);elsep1-next=p;p-next=NU
18、LL;return(head);/*保存数据到文件*/void Save(struct student *head)FILE *fp;struct student *p;p=head;if(fp=fopen(DAT_FILENAME,w+)!=NULL) /*以W+的方式翻开文件*/while(p!=NULL)fprintf(fp,%dt,p-ID);fprintf(fp,%st,p-Name);fprintf(fp,%dt,p-age);fprintf(fp,%ct,p-xb);fprintf(fp,%st,p-telephone);fprintf(fp,%st,p-address);fpr
19、intf(fp,%d %d %dt,p-birthday.year,p-birthday.month,p-birthday.day);fprintf(fp,%sn,p-email);p=p-next; /*将链表的容写入文件*/fclose(fp);elseprintf(cannot open filen);/*翻开数据文件*/struct student *Read(struct student *head)struct student *p;p=(struct student *)malloc(LEN);FILE *fp;if(fp=fopen(DAT_FILENAME,r)!=NULL)
20、/*读取文件中的容到链表中*/while(fscanf(fp,%dt,&p-ID)!=EOF)fscanf(fp,%st,p-Name);fscanf(fp,%dt,&p-age);fscanf(fp,%ct,&p-xb);fscanf(fp,%st,p-telephone);fscanf(fp,%st,p-address);fscanf(fp,%d %d %dt,&p-birthday.year,&p-birthday.month,&p-birthday.day);fscanf(fp,%sn,p-email);head=Insert(head,p);p=(struct student *)m
21、alloc(LEN);fclose(fp);elseprintf(cannot open filen);return head;/*文件容追加*/struct student *Add(struct student *head)head=Read(head);head=InformationInput(head);return (head);/*删除信息*/struct student *Delete(struct student *head,int findID)struct student *pre,*p;if(head-ID=findID)p=head;head=head-next;el
22、sepre=head; p=pre-next;while(p!=NULL&p-ID!=findID)pre=p;p=p-next;if(p-ID=findID)pre-next=p-next;free(p);return (head);/*主函数*/void main()char select,c;struct student *head;head=NULL;select=0;while(select!=0)DispMainMenu();select=getche();getch();switch(select)case0:printf(n您选择的是退出!n);_beep(300,400);c
23、ontinue;case1:system(cls);printf(n您选择的是信息录入!n);head=InformationInput(head);break;case2:system(cls);printf(n您选择的是信息修改!n);head=EditInformation(head);break;case3:system(cls);printf(n您选择的是信息查询!n);QueryInformation(head);break;case4:system(cls);printf(n您选择的是保存数据到文件!n);Save(head);break;case5:system(cls);pr
24、intf(n您选择的是翻开数据文件!n);if(head=Read(head)!=NULL)DisplayInformation(head);break;case6:system(cls);printf(n您选择的是文件追加!n);head=Add(head);break;case7:system(cls);printf(n您选择的是帮助!n);Help();break;default:printf(n选择错误!请重新选择!n);printf(请选择返回主界面或退出!n); /选择是否继续printf(主界面:1t退出:2t); scanf(%d,&c);while(!(c=1|c=2)printf(选择错误,请重新选择!); printf(n主界面:1t退出:2t); scanf(%d,&c); if(c=1) system(cls); else system(cls); _beep(300,400); printf(nt您已平安退出!n); break;- - word.zl-