C語言實現學生籍貫信息記錄簿
本文實例為大傢分享瞭C語言實現學生籍貫信息記錄簿的具體代碼,供大傢參考,具體內容如下
一、任務概述(文章僅供參考)
進一步掌握和利用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; }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。