1、
#include〈stdio.h>
#include
2、 { int ID; char Name[8]; int age; char xb; char telephone[15]; char address[40]; struct date birthday; char email[40]; struct student *next; }; /*************************函数原型*********************/ void DispMainMenu(); void DisplayInformation(struct student *head); struct stude
3、nt *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); struct student *EditInformation(struct student *head); struct student *
4、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(); /************************显示主菜单**************************
5、*/ void DispMainMenu() { printf("*********************************学生信息管理系统******************************\n”); printf(”\n”); printf(”\t\t\t\t1-—信息录入\n"); printf("\n"); printf("\t\t\t\t2-—信息修改\n"); printf(”\n”); printf("\t\t\t\t3-—信息查询\n”); printf(”\n”); printf(”\t\t\t\t4—-保存数据到文件\
6、n"); printf(”\n”); printf(”\t\t\t\t5-—打开数据文件\n”); printf("\n”); printf("\t\t\t\t6—-文件追加\n”); printf("\n"); printf(”\t\t\t\t7-—帮助\n”); printf(”\n”); printf(”\t\t\t\t0--退出\n”); printf(”\n"); printf(”友情提示:初次使用请先阅读帮助\n"); printf("****************************************************
7、***************************\n”); printf("请选择(0—7):”);/*显示主菜单*/ } /*************************************帮助**************************************************/ void Help() { printf("\n\t\t\t欢迎进入帮助系统!\n\n”); printf("\t1。请按照主菜单提示选择所需执行功能的数字代号!\n”); printf("\t2.所有文件请按照规范输入\n"); printf("\t
8、3.刚开始执行程序时若需要文本文件里的数据,请先进行读取文件信息!\n"); printf(”\t4。修改信息以后,请切记需要保存!\n”); printf(”\n"); } /***********************显示所有学生信息**********************/ void DisplayInformation(struct student *head) { struct student *p; printf(”*********************************************************************
9、*********”); printf(”\n学号\t姓名\t年龄\t性别\t 电话\t\t地址\t 出生年月\t email\n"); p=(struct student *)malloc(LEN); p=head; if(head!=NULL) while(p!=NULL) { printf("%—d\t%—s\t%-d\t”,p—〉ID,p—〉Name,p->age); printf(”%—c\t%—s\t%—s\t",p—〉xb,p—〉telephone,p-〉address); printf(”%—d %d %d”,p—〉birt
10、hday。year,p-〉birthday。month,p->birthday.day); printf(”\t%-s\n",p—>email); p=p—〉next; } else printf(”无数据\n"); } /**************************查找指定学号的学生信息******************************/ struct student *FindstudentID(struct student *head,int findID) { struct student *p; p=(struct s
11、tudent *)malloc(LEN); p=head; if(head!=NULL) while(p!=NULL) { if(p-〉ID==findID) break; p=p->next; } else printf("无数据\n”); return p; } /***************************查找指定姓名的学生信息**********************/ struct student *FindstudentName(struct student *head,char findname[]
12、) { 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; } else printf(”无数据\n"); return p; } /********************学生信息录入**********************************/ struct studen
13、t *InformationInput(struct student *head) { int number,i; struct student *p; p=(struct student *)malloc(LEN); printf(”\n请输入本次录入的学生人数:"); scanf("%d”,&number); for(i=0;i〈number;i++)/*输入 number 个学生的信息*/ { printf("请输入第%d个学生的学号(八个字符以内):”,i+1); scanf("%d”,&p-〉ID); printf("\t\t\t 姓
14、名:\t”); scanf("%s”,p—>Name); printf(”\t\t\t 年龄:\t"); scanf(”%d”,&p—〉age); printf(”\t\t\t 性别(男M、女W):”); scanf("%s",&p—〉xb); printf(”\t\t\t 电话(八位):\t"); scanf(”%s”,p—>telephone); printf("\t\t\t 地址:\t”); scanf("%s”,p-〉address); printf("\t\t\t 出生年月:\t”); scanf("%d%d%d",&
15、p—〉birthday.year,&p—〉birthday。month,&p->birthday。day); printf("\t\t\temail:\t"); scanf("%s",p—>email); head=Insert(head,p); p=(struct student *)malloc(LEN); } printf("\n 您的输入信息是:\n”); DisplayInformation(head); return(head); } /**************************学生信息查询*******************
16、******/ void QueryInformation(struct student *head) { char select; int findID; char findname[8]; struct student *p; printf("*********************请选择查询方式*************************\n”); printf("\t1-—按学号查询;\t2——按姓名查询\n”); printf(”**********************************************************
17、**\n”); printf(”请选择(1-2):");/*显示菜单信息*/ select=getche(); getch(); switch (select) { case’1’: printf("\n 按学号查询\n 请输入学生的学号:”); scanf(”%d",&findID); if((p=FindstudentID(head,findID))!=NULL) /*找到指定学号的学生*/ { printf(”\n 查找结果如下:\n”); printf(”\n学号\t姓名\t年龄\t性别\t 电话\t\t地
18、址\t 出生年月\t email\n"); printf(”%d\t%s\t%d\t”,p—>ID,p-〉Name,p—>age); printf(”%c\t%s\t%s\t”,p—〉xb,p-〉telephone,p—〉address); printf("%d %d %d",p—>birthday。year,p—〉birthday。month,p—>birthday。day); printf(”\t%s\n”,p—〉email); } else /*没有找到*/ printf(”您输入的学号不存在!\n”); b
19、reak; case’2’: printf(”\n 按姓名查询\n 请输入学生的姓名:”); scanf("%s",&findname); if((p=FindstudentName(head,findname))!=NULL) /*找到指定姓名的学生*/ { printf("\n 查找结果如下:\n"); printf(”\n 学号\t 姓名\t 年龄\t 性别\t 电话\t 地址\t 出生年月\t email\n”); printf("%d\t%s\t%d\t",p—〉ID,p-〉Name,p->age);
20、printf(”%c\t%s\t%s\t”,p—>xb,p—〉telephone,p—〉address); printf(”%d %d %d”,p-〉birthday。year,p—〉birthday。month,p—〉birthday.day); printf(”\t%s\n”,p->email); } else /*没有找到*/ printf(”您输入的姓名不存在!\n”); break; default: printf(”选择错误!\n"); } } /****************************
21、*****修改学生信息***********************/ struct student *EditInformation(struct student *head) { int findID; char select; struct student *p; printf("\n 请输入学生的学号:"); scanf(”%d”,&findID); if((p=FindstudentID(head,findID))!=NULL) /*找到指定学号的学生*/ { printf(”*********************请修改
22、方式*************************\n”); printf(”\t1——修改信息;\t2——删除信息\n"); printf(”************************************************************\n"); printf("请选择(1—2):"); select=getche(); getch(); switch (select) { case’1’: /*修改信息*/ printf(”您选择的是修改信息!\n”); printf
23、姓 名:%s\n”,p—>Name); printf(”原信息:学号:%d\t 年龄:%d\t 性别:%c\n”,p->ID,p—>age,p-〉xb); printf("\t 电话:%s\t 地址:%s\temail:%s\n",p-〉telephone,p—>address,p—〉email); printf(”请输入新信息\n"); printf(”学号\t”); scanf("%d”,&p—〉ID); printf("姓名:\t”); scanf(”%s”,p—〉Name); printf(”年龄:\
24、t”); scanf(”%d",&p->age); printf("性别(男M、女W):”); scanf(”%s”,&p—〉xb); printf(”电话:\t”); scanf(”%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(”
25、email:\t”); scanf("%s",p—>email); break; case’2’: /*删除信息*/ printf(”您选择的是删除信息!\n"); head=Delete(head,findID); break; } } else /*没有找到学号匹配的记录*/ printf(”您输入的学号不存在!\n"); return (head); } /**************************有序插入************************************
26、***/ struct student *Insert(struct student *head,struct student *p) { struct student *p0,*p1; if(head==NULL) { head=p; p->next=NULL; return(head); } if(p-〉ID〈head—〉ID) { p->next=head; head=p; return(head); } p1=head; while((p—〉ID>p1—>ID)&&(p1—〉next!=NULL)) {
27、 p0=p1; p1=p1—〉next; } if(p-〉ID〈p1—〉ID) { p—>next=p1; p0-〉next=p; } else { if(p->ID==p1—>ID) ; else { p1—〉next=p; p—〉next=NULL; } } return(head); } /*******************************保存数据到文件**************************/ void Save(struct student *head)
28、 { FILE *fp; struct student *p; p=head; if((fp=fopen(DAT_FILENAME,”w+”))!=NULL) /*以W+的方式打开文件*/ { while(p!=NULL) { fprintf(fp,”%d\t”,p-〉ID); fprintf(fp,”%s\t",p—〉Name); fprintf(fp,”%d\t",p—〉age); fprintf(fp,"%c\t",p->xb); fprintf(fp,"%s\t",p—〉telephon
29、e); fprintf(fp,”%s\t”,p—〉address); fprintf(fp,"%d %d %d\t",p—〉birthday.year,p—〉birthday.month,p—〉birthday.day); fprintf(fp,”%s\n”,p—〉email); p=p—>next; } /*将链表的内容写入文件*/ fclose(fp); } else printf(”cannot open file\n”); } /***************************打开数据
30、文件************************/ struct student *Read(struct student *head) { struct student *p; p=(struct student *)malloc(LEN); FILE *fp; if((fp=fopen(DAT_FILENAME,”r"))!=NULL) { /*读取文件中的内容到链表中*/ while(fscanf(fp,”%d\t",&p-〉ID)!=EOF) { fscanf(fp,"%s\t",p->Name); fscanf(fp,"%
31、d\t”,&p—>age); fscanf(fp,"%c\t”,&p->xb); fscanf(fp,”%s\t",p—>telephone); fscanf(fp,”%s\t”,p->address); fscanf(fp,”%d %d %d\t",&p-〉birthday。year,&p—〉birthday。month,&p—〉birthday.day); fscanf(fp,"%s\n”,p—>email); head=Insert(head,p); p=(struct student *)malloc(LEN); }
32、fclose(fp); } else printf(”cannot open file\n"); return head; } /**************************文件内容追加************************/ struct student *Add(struct student *head) { head=Read(head); head=InformationInput(head); return (head); } /**************************删除信息******************
33、**********/ struct student *Delete(struct student *head,int findID) { struct student *pre,*p; if(head—>ID==findID) { p=head; head=head—〉next; } else { pre=head; p=pre—〉next; while(p!=NULL&&p-〉ID!=findID) { pre=p; p=p—〉next; } if(p—〉ID==findID) pre—〉
34、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) {
35、 case'0’: printf(”\n您选择的是退出!\n"); _beep(300,400); continue; case’1': system(”cls”); printf("\n您选择的是信息录入!\n”); head=InformationInput(head); break; case’2’: system("cls”); printf("\n您选择的是信息修改!\n”); head=EditInformation(head); break; ca
36、se’3’: system("cls"); printf("\n您选择的是信息查询!\n”); QueryInformation(head); break; case’4’: system("cls”); printf(”\n您选择的是保存数据到文件!\n"); Save(head); break; case'5': system("cls”); printf(”\n您选择的是打开数据文件!\n”); if((head=Read(head))!=NULL)
37、DisplayInformation(head); break; case'6’: system(”cls"); printf(”\n您选择的是文件追加!\n”); head=Add(head); break; case'7’: system("cls”); printf(”\n您选择的是帮助!\n”); Help(); break; default: printf(”\n选择错误!请重新选择!\n”); } printf(”请选择返回主界面或退出!\n");
38、 //选择是否继续 printf("主界面:1\t退出:2\t”); scanf(”%d",&c); while(!(c==1||c==2)) { printf(”选择错误,请重新选择!”); printf("\n主界面:1\t退出:2\t”); scanf(”%d",&c); } if(c==1) system("cls”); else { system("cls"); _beep(300,400); printf(”\n\t您已安全退出!\n”); break; } } }






