C语言籍贯信息记录簿
普通学长 人气:0一、任务概述(文章仅供参考)
进一步掌握和利用C语言进行课程设计的能力;
进一步理解和运用结构化程序设计的思想和方法;
初步掌握开发一个小型实用系统的基本方法;
二、设计功能
1.创建信息链表并以磁盘文件保存;
2.读取磁盘文件并显示输出所有学生的籍贯信息;
3.按学号或姓名查询其籍贯;
4.按籍贯查询并输出该籍贯的所有学生;
5.能添加、删除和修改学生的籍贯信息
三、功能展示
四、思维导图
五、程序源码
#include "dos.h" #include "stdio.h" #include "stdlib.h" #include "conio.h" #include "math.h" #include "string.h" /**********************建立链表******************************/ struct hj { long number; char name[10],address[50]; struct hj *next; }; /********************文件操作函数******************************/ FILE *fp; void openfile(char xx[20]) { fp=fopen(xx,"ab+"); if(fp==NULL) fp=fopen(xx,"wb"); } /**************录入信息函数***********************************/ void hjnew(void) { system("cls"); int n=0; long xnumber; char xname[10]; char xaddress[50]; struct hj *head; struct hj *x1,*x2; head=NULL; x2=NULL; printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n"); printf("\n ★★★录入信息★★★\n"); printf("\n 〓提示输入0返回上级菜单〓\n\n\n"); printf("\n 请输入学号【15字内】:"); scanf("%ld",&xnumber); if(xnumber==0) goto haha; printf("\n 请输入姓名【10字内】:"); scanf("%s",xname); printf("\n 请输入籍贯【25字内】:"); scanf("%s",xaddress); while(xnumber!=0) { n++; x1=(struct hj *)malloc(sizeof(struct hj)); x1->number=xnumber; strcpy(x1->name,xname); strcpy(x1->address,xaddress); if(n==1) head=x1; else x2->next=x1; x2=x1; printf("\n 请输入学号【15字内】:"); scanf("%ld",&xnumber); if(xnumber==0) break; printf("\n 请输入姓名【10字内】:"); scanf("%s",xname); printf("\n 请输入籍贯【25字内】:"); scanf("%s",xaddress); } x2->next=NULL; x1=head; while(x1!=NULL) { openfile("hj.txt"); char d[5]="山西"; fwrite(x1,sizeof(struct hj),1,fp); fclose(fp); if(strstr(x1->address,d)!=NULL) { openfile("schj.txt"); fwrite(x1,sizeof(struct hj),1,fp); fclose(fp); } else { openfile("qthj.txt"); fwrite(x1,sizeof(struct hj),1,fp); fclose(fp); } x1=x1->next; } haha:; } /*****************************查询函数*************************/ void hjxmselect(void) //按学号方式查询函数 { ssmmx: int n=0; long hh; system("cls"); printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n"); printf("\n ★★★查询编辑信息★★★\n"); printf("\n 〓提示输入0返回上级菜单〓\n\n\n"); printf(" 请您输入学号:"); scanf("%ld",&hh); if(hh!=0) { struct hj *p; struct hj *q=NULL,*head=NULL; fp=fopen("hj.txt","rb"); if(fp==NULL) { printf("\n没有记录,请输入记录然后再查询!"); getch(); goto jjx; } while(!feof(fp)) { n++; p=(struct hj *)malloc(sizeof(struct hj)); fread(p,sizeof(struct hj),1,fp); if(n==1) head=p; else q->next=p; q=p; } q->next=NULL; p=head; while(p!=NULL) { if(p->number==hh) { int a; printf("\n 结 果 → 学号=%ld 姓名=%s",p->number,p->name); printf("\n 地址=%s",p->address); printf("\n\n 操 作 → ⑴更改数据 ⑵删除数据 ⑶查询其他数据 ⑷返回上页 ⑸退出程序\n\n 请您选择操作:"); ssmx: scanf("%d",&a); switch(a) { void hjedit(struct hj *headd,struct hj *pp); void hjdelete(struct hj *headdd,struct hj *ss); case 1: hjedit(head,p); goto ssmmx;break; case 2: hjdelete(head,p); goto ssmmx;break; case 3: goto ssmmx; case 4: goto jjx; case 5:exit(0); default:printf("\n 错误的选择,请重新选择:"); goto ssmx; } } else p=p->next; } int iiii=0; printf("\n 没有此记录 1.重新查询 2.返回上一页 3.退出程序!"); printf("\n 请选择:"); qqqq: scanf("%d",&iiii); switch(iiii) { case 1: goto ssmmx; case 2: goto jjx; case 3: exit(0); default: printf("\n 错误的选择,请重新选择:"); goto qqqq; } goto jjx; } jjx:; } void hjxhselect(void)//按姓名方式查询函数 { ssmm: int n=0; char hh[10]; system("cls"); printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n"); printf("\n ★★★查询编辑信息★★★\n"); printf("\n 〓提示输入0返回上级菜单〓\n\n\n"); printf(" 请您输入姓名:"); scanf("%s",hh); if(strcmp(hh,"0")!=0) { struct hj *p; struct hj *q=NULL,*head=NULL; fp=fopen("hj.txt","rb"); if(fp==NULL) { printf("\n没有记录,请输入记录然后再查询!"); getch(); goto jjj; } while(!feof(fp)) { n++; p=(struct hj *)malloc(sizeof(struct hj)); fread(p,sizeof(struct hj),1,fp); if(n==1) head=p; else q->next=p; q=p; } q->next=NULL; p=head; while(p!=NULL) { if(strcmp(p->name,hh)==0) { int a; printf("\n 结 果 → 学号=%ld 姓名=%s ",p->number,p->name); printf("\n 地址=%s",p->address); printf("\n\n 操 作 → ⑴更改数据 ⑵删除数据 ⑶查询其他数据 ⑷返回上页 ⑸退出程序\n\n 请您选择操作:"); ssm: scanf("%d",&a); switch(a) { void hjedit(struct hj *headd,struct hj *pp); void hjdelete(struct hj *headdd,struct hj *ss); case 1: hjedit(head,p); goto ssmm;break; case 2: hjdelete(head,p); goto ssmm;break; case 3: goto ssmm; case 4: goto jjj; case 5:exit(0); default:printf("\n 错误的选择,请重新选择:"); goto ssm; } } else p=p->next; } int iii=0; printf("\n 没有此记录 1.重新查询 2.返回上一页 3.退出程序!"); printf("\n 请选择:"); qqq: scanf("%d",&iii); switch(iii) { case 1: goto ssmm; case 2: goto jjj; case 3: exit(0); default: printf("\n 错误的选择,请重新选择:"); goto qqq; } goto jjj; } jjj: ; } void hjjgselect(void)//按籍贯方式查询 { yyy: int i; system("cls"); printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n"); printf("\n ★★★籍贯方式查询信息★★★\n\n\n"); printf("\n 一 显示所有信息\n"); printf("\n 二 显示山西籍所有信息\n"); printf("\n 三 显示其它籍所有信息\n"); printf("\n 四 自定义查询信息\n"); printf("\n 五 ←返回上级菜单\n"); printf("\n 六 ↓退出程序\n"); printf("\n\n 请选择:"); scanf("%d",&i); switch(i) { void zdyselect(void); void allselect(char a[8]); case 1:allselect("hj.txt"); goto yyy;break; case 2: allselect("schj.txt"); goto yyy;break; case 3: allselect("qthj.txt"); goto yyy;break; case 4: zdyselect(); case 5: break; case 6: exit(0); } } void zdyselect(void) { ssmmz: int n=0,j=0; char hh[10]; system("cls"); printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n"); printf("\n ★★★自定义查询信息★★★\n\n\n"); printf(" 请您输入地址关键字:"); scanf("%s",hh); if(strcmp(hh,"0")!=0) { struct hj *p; struct hj *q=NULL,*head=NULL; fp=fopen("hj.txt","rb"); if(fp==NULL) { printf("\n 没有记录,请输入记录然后再查询!"); getch(); goto jjz; } while(!feof(fp)) { n++; p=(struct hj *)malloc(sizeof(struct hj)); fread(p,sizeof(struct hj),1,fp); if(n==1) head=p; else q->next=p; q=p; } q->next=NULL; p=head; while(p!=NULL) { if(strstr(p->address,hh)!=NULL) { int a; j++; printf("\n 结 果 → 学号=%ld 姓名=%s ",p->number,p->name); printf("\n 地址=%s",p->address); printf("\n\n 操 作 → ⑴更改数据 ⑵删除数据 ⑶查询下一条数据 ⑷返回上页 ⑸退出程序\n\n 请您选择操作:"); ssmz: scanf("%d",&a); switch(a) { void hjedit(struct hj *headd,struct hj *pp); void hjdelete(struct hj *headdd,struct hj *ss); case 1: hjedit(head,p); goto ssmmz;break; case 2: hjdelete(head,p); goto ssmmz;break; case 3: p=p->next;continue; case 4: goto jjz; case 5:exit(0); default:printf("\n 错误的选择,请重新选择:"); goto ssmz; } p=p->next; } else p=p->next; } if(j==0) { printf("\n\n\n没有匹配的记录 按任意键继续!"); getch(); fclose(fp); goto ssmmz; } else { int xx; printf("\n\n查询完毕! ⑴ 继续查询 ⑵ 返回上一级菜单 ⑶ 退出程序"); printf("\n请选择:"); scanf("%d",&xx); if(xx==2) goto jjz; else if(xx==3) exit(0); } goto ssmmz; jjz: ; } } void allselect(char a[8])//全部查询 { int n=0; int k=0; system("cls"); printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n"); printf("\n ★★★籍贯方式信息★★★\n\n\n"); struct hj *p; struct hj *q=NULL,*head=NULL; fp=fopen(a,"rb"); if(fp==NULL) { printf("\n对不起,没有记录无法查询!"); goto xxxx; } rewind(fp); while(!feof(fp)) { n++; p=(struct hj *)malloc(sizeof(struct hj)); fread(p,sizeof(struct hj),1,fp); if(n==1) head=p; else q->next=p; q=p; } q->next=NULL; struct hj *h1,*p2,*q3,*r4,*s5; h1=p2=(hj *)malloc(sizeof(struct hj)); p2->next=head; while(p2->next!=NULL) { q3=p2->next; r4=p2; while(q3->next!=NULL) { if(q3->next->number<p2->next->number) r4=q3; q3=q3->next; } if(r4!=p2) { s5=r4->next; r4->next=s5->next; s5->next=p2->next; p2->next=s5; } p2=p2->next; } head=h1->next->next; free(h1); p=head; while(p!=NULL&&n>0) { n--; printf("\n学号=%ld 姓名=%s",p->number,p->name); printf("\n地址=%s",p->address); p=p->next; } xxxx: printf("\n→显示完毕←\n⑴ ↑返回上级菜单 ⑵ ↓退出程序 \n请 选 择 :"); xxx: scanf("%d",&n); switch(n) { case 1:break; case 2:exit(0); default:printf("\n错误的选择,请重新选择:"); goto xxx; } } void hjselect(void)//查询编辑信息函数 { cxbegin: int a; system("cls"); printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n"); printf("\n ★★★查询编辑信息★★★\n\n\n"); printf("\n 一 按学号方式查询\n"); printf("\n 二 按姓名方式查询\n"); printf("\n 三 按籍贯方式查询\n"); printf("\n 四 →显示全部信息\n"); printf("\n 五 ←返回上级菜单\n"); printf("\n 请 选 择 查 询 方 式:"); cxmm: scanf("%d",&a); switch(a) { case 1: hjxmselect();goto cxbegin;break; case 2: hjxhselect();goto cxbegin;break; case 3: hjjgselect();goto cxbegin;break; case 4: allselect("hj.txt");goto cxbegin;break; case 5: break; default:printf("\n错误的选择,请重新选择:"); goto cxmm; } } void hjde(void)//删除界面函数 { cxxbegin: int a; system("cls"); printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n"); printf("\n ★★★删除信息★★★\n\n\n"); printf("\n 一 按学号方式删除\n"); printf("\n 二 按姓名方式删除\n"); printf("\n 三 按籍贯方式删除\n"); printf("\n 四 →删除全部信息\n"); printf("\n 五 ←返回上级菜单\n"); printf("\n 请 选 择 删 除 方 式:"); cxxmm: scanf("%d",&a); int i=0; switch(a) { case 1: hjxmselect();goto cxxbegin;break; case 2: hjxhselect();goto cxxbegin;break; case 3: zdyselect();goto cxxbegin;break; case 4: fp=fopen("hj.txt","wb"); if(fp!=NULL) i++; fp=fopen("schj.txt","wb"); if(fp!=NULL) i++; fp=fopen("qthj.txt","wb"); if(fp!=NULL) i++; if(i==3) { printf("\n 全部数据已经删除!!!!!!敲任意键继续"); getch(); } goto cxxbegin;break; case 5: break; default:printf("\n错误的选择,请重新选择:"); goto cxxmm; } } //==============删除函数接口=============== void hjdelete(struct hj *headdd,struct hj *ss) { struct hj *q; char d[5]="山西"; if(headdd==ss) { headdd=headdd->next; goto gogo; } q=headdd; while(q!=NULL) { if(q->next->number==ss->number) { break; } q=q->next; } q->next=ss->next; gogo: q=headdd; fp=fopen("hj.txt","wb"); while(q!=NULL) { fwrite(q,sizeof(struct hj),1,fp); q=q->next; } fclose(fp); q=headdd; fp=fopen("schj.txt","wb"); while(q!=NULL) { if(strstr(q->address,d)!=NULL) { fwrite(q,sizeof(struct hj),1,fp); } q=q->next; } fclose(fp); q=headdd; fp=fopen("qthj.txt","wb"); while(q!=NULL) { if(strstr(q->address,d)==NULL) { fwrite(q,sizeof(struct hj),1,fp); } q=q->next; } fclose(fp); } //===============编辑函数接口============== void hjedit(struct hj *headd,struct hj *pp) { int n=0; struct hj *p,*p1,*p2; char d[5]="江苏"; printf("\n 输 入 → 学号="); scanf("%ld",&pp->number); printf("\n 姓名="); scanf("%s",pp->name); printf("\n 地址="); scanf("%s",pp->address); p=headd; fp=fopen("hj.txt","wb"); while(p!=NULL) { fwrite(p,sizeof(struct hj),1,fp); p=p->next; } fclose(fp); p1=headd; fp=fopen("schj.txt","wb"); while(p1!=NULL) { if(strstr(p1->address,d)!=NULL) { fwrite(p1,sizeof(struct hj),1,fp); } p1=p1->next; } fclose(fp); p2=headd; fp=fopen("qthj.txt","wb"); while(p2!=NULL) { if(strstr(p2->address,d)==NULL) { fwrite(p2,sizeof(struct hj),1,fp); } p2=p2->next; } fclose(fp); } /**************************主函数***********************/ int main(int argc, char* argv[]) { begin: int t; system("cls"); printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n\n\n\n\n"); printf(" 一 录入学生籍贯信息\n\n"); printf(" 二 查编学生籍贯信息\n\n"); printf(" 三 删除学生籍贯信息\n\n"); printf(" 四 退出程序\n\n"); printf(" 请您选择:"); mm: scanf("%d",&t); switch(t) { case 1: hjnew();break; case 2: hjselect();break; case 3: hjde();break; case 4:exit(0); default:printf("\n 错误的选择,请重新选择:"); goto mm; } goto begin; return 0; }
加载全部内容