1、#includestdio.hincludename); printf(”n请输入性别:”); getchar(); /取走上一个留下来得n/ scanf(”%s”,psex); printf(”n请输入生日(年月日,用回车隔开):n); scanf(”ddd,&p-birth。year,&pbirth.month,pbirth.day); printf(n请输入系别:”); scanf(%s,p-xi); printf(”n请输入班级:”); scanf(”s,pban); printf(”n请输入家庭住址:”); scanf(s,p-add); pnext=NULL; if(h=NULL)
2、 h=p; return 1; p0=h; if(p0numpnum) p-next=p0; *h=p; return 1; while(p0-next!=NULLp0nextnumpnum) p0=p0-next; if(p0-next=NULL) p0next=p; return 1; else if(p0-next-num=pnum) free(p); /有相同数据输入失败*/ return 0; else pnext=p0-next; p0-next=p; return 1; /读文件模块/ /读文件模块中创建了一个新的链表,其返回值为新链表的头指针/struct STH readfi
3、le() FILE *fp; struct STH *p,*p0; char ch; int i; if(fp=fopen(STH。txt,r)=NULL) printf(n不能读取文件!n”); return NULL; /注意要该/ head=p=p0=(struct STH *)malloc(N); fscanf(fp,”d”,n); fscanf(fp,”c,ch); /为了使学号和信息个数分开加入一个/*/ fscanf(fp,”lds%s%dd%ds%ss”, pnum,pname,psex,&p-birth。year,pbirth。month,pbirth.day,pxi,p-b
4、an,p-add); p-next=NULL; i=1; /如果只有一个数时跳出*/ if(n!=1) do p=(struct STH *)malloc(N); fscanf(fp,”lds%sddd%s%ss, &pnum,pname,p-sex,&pbirth。year,pbirth。month,pbirth。day,p-xi,pban,padd); p0-next=p; p0=p; i+; while(in); p0-next=NULL; fclose(fp); return head;/插入模块*/insert_message() struct STH p; int flag=1;
5、char ch; head=readfile(); do if(insert(head)!=0) n+; save_message(); printf(”); /计数/ else printf(”n添加失败!n有相同的的学号!); save_message(); getch(); printf(n是否继续?(y/n); getchar(); ch=getchar(); if(ch=y|ch=Y) printf(”n继续!); flag=1;/标志程序不结束/ else flag=0; while(flag=1); printf(”n按任意键继续。); getch();/修改模块*/renew_
6、message() struct STH *p; int i,flag=1; long num; p=head=readfile(); if(head=NULL) printf(读文件有误!”); getch(); else printf(”n请按输入要修改的学生的学号:); scanf(”%ld”,num); for(i=0;in;i+) if(pnum=num) pnum=num; printf(”n已找到要%ld号学生的信息!n,num); printf(”原姓名为%s 要修改为:n,pname); scanf(”s”,pname); printf(原性别为s 要修改为:n”,psex)
7、; scanf(”s,psex); printf(原生日为d/%d/%d 要修改为:n”,pbirth。year,p-birth。month,p-birth.day); scanf(”ddd,&pbirth。year,p-birth。month,pbirth。day); printf(”原系别为s 要修改为:n,pxi); scanf(”%s,pxi); printf(”原班级为%s 要修改为:n”,p-ban); scanf(s”,pban); printf(”原家庭住址为%s 要修改为:n,padd); scanf(s”,padd); printf(”你所更改后的信息为:n”); prin
8、tf(PRINTF); printf(GESHI, pnum,p-name,p-sex,pbirth。year,pbirth.month,pbirth.day,pxi,pban,padd); printf(”n按任意键退出!n); getch(); flag=1; break; else p=pnext; if(flag!=1) printf(无此人信息!n”); else save_message(); getch(); /删除模块/delete_message() int flag; long num; char ch; struct STHp,p0; p0=p=head=readfile
9、(); if(head=NULL) printf(”文件读取出错!); getch(); else printf(”请输入要删除学生的学号:n”); scanf(”%ld,&num); if(p0num=num) head=p0next; free(p0); flag=1; n; /学生数减一/ p=p0next; while(p!=NULL) if(p-num=num) p0-next=pnext; free(p); flag=1; n-; else p0=p; p=pnext; if(pnext=NULL) flag=0; if(flag=1) printf(n永久删除ld号学生的信息?(
10、y/n),num); getchar(); ch=getchar(); if(ch=y|ch=Y) save_message(); else printf(”n撤消删除!); getch(); else printf(”n删除失败!”); getch(); /查询模块/inquire_message() int i,flag=0; long num; struct STH *p; p=head=readfile(); if(head=NULL) printf(”文件读取出错!”); getch(); else printf(”请输入要查询学生的学号:n”); scanf(”ld”,&num);
11、 for(i=0;inum=num) printf(n信息已找到:n); getch(); clrscr(); printf(”*FOUND*n”); printf(-nn”); printf(PRINTF); printf(GESHI, pnum,pname,psex,p-birth。year,pbirth。month,pbirth。day,p-xi,pban,padd); printf(”n-n”); printf(”*END*n”); flag=1;break; else p=p-next; if(flag=0) printf(”n无此人信息!”); else printf(”n显示完毕
12、!按任意键返回主菜单.。.”); getch(); /显示模块*/output_message() int i=0; struct STH*p; p=head=readfile(); if(head=NULL) printf(”文件读取出错!”); getch(); else clrscr(); printf(”n*STUDENT*n); printf(”-n); printf(PRINTF); while(in) printf(GESHI, pnum,p-name,psex,pbirth。year,pbirth。month,pbirth.day,pxi,pban,padd); p=pnext
13、; i+; printf(”-n”); printf(”*END*n); printf(n显示完毕!n共d条信息.n按任意键返回主菜单。.”,n); getch(); /存档模块*/save_message() FILE *fp; int i; struct STHp; p=head; if(fp=fopen(”STH。txt,”w”)=NULL) printf(读文件错误!”); exit(0); fprintf(fp,”d,n); fprintf(fp,”c,/); /注意要该/ for(i=0;isex,p-birth.year,pbirth。month,pbirth。day,pxi,p
14、ban,p-add); p=pnext; fclose(fp); printf(”n信息已经保存在STH。txt文件中!”); getch(); /主函数/void main(void) int choice; char ch; FILE fp; struct date d; getdate(d); if((fp=fopen(”STH。txt”,r”)=NULL) fp=fopen(”STH。txt”,w); fprintf(fp,”d”,0); fclose(fp); else fscanf(fp,”d”,n); fclose(fp); clrscr(); printf(”制作人:通工050
15、1 李艺凡); printf(”nnn); printf( * n”); printf( 欢迎进入学生户籍系统 nn); printf( 1 创建记录n”); printf(” 2 添加记录n); printf(” 3 查找记录n); printf( 4 删除记录n); printf( 5 修改记录n); printf( 6 显示全部信息n); printf( 0 退出程序n”); printf(” * n”); printf(” d年%d月d日”,d。da_year,d。da_mon,d。da_day); printf( n 请选择(06):); scanf(d”,choice); if(n
16、=0) /记录为空时不让其进行其他操作*/ while(choice0|choice1) printf(记录为空,无法操作此项!”); printf(”请重新输入:(0或1)n”); scanf(%d”,choice); else while(choice0|choice6) printf(”输入有误!n 请重新输入:n); scanf(”%d,choice); do switch(choice) case 1:input_message();break; case 2:insert_message();break; case 3:inquire_message();break; case 4
17、:delete_message();break; case 5:renew_message();break; case 6:output_message();break; case 0:break; printf(”n按任意键返回主菜单!”); getchar(); ch=y; if(ch=Y|ch=y) clrscr(); printf(制作人:通工0501 李艺凡”); printf(nnn”); printf(” * n”); printf(” 欢迎进入学生户籍系统 nn”); printf(” 1 创建记录n”); printf(” 2 添加记录n”); printf(” 3 查找记录n”); printf( 4 删除记录n”); printf( 5 修改记录n); printf(” 6 显示全部信息n”); printf( 0 退出程序n); printf( * n); printf(” %d年d月%d日,d。da_year,d.da_mon,d。da_day); printf(” n 请选择(06):); scanf(”d”,choice); while(choice!=0); printf(以上信息已经保存在STH.txt中!n”);