C語言實現簡單的學生學籍管理系統
本文實例為大傢分享瞭C語言實現學生學籍管理系統的具體代碼,供大傢參考,具體內容如下
一 .課題設計內容與主要功能
1.1問題描述:
通過該系統實現對學生學籍信息進行錄入、顯示、修改、插入、刪除、排序、保存等操作的管理。
2.1功能要求:
1、本系統采用一個包含N個數據的結構體數組,每個數據的結構應當包括:學號、姓名、性別、出生日期、入學時間、專業、班級、備註。
2、本系統顯示這樣的菜單:
請選擇系統功能項:
j.學生學籍信息錄入
k.學生學籍信息顯示
l.學生學籍信息保存
m.學生學籍信息修改
n.學生學籍信息插入
o.學生學籍信息刪除
p.學生學籍信息排序
q.學生學籍信息查詢
r.退出系統
3、執行一個具體的功能之後,程序將重新顯示菜單。
4、將學生學籍信息保存到文件中。
二.代碼
#include "stdio.h" #include "string.h" #include "stdlib.h" #define PF printf #define SF scanf #define N 20 FILE *fp; static int n = 0, i, m; struct date { char year[10]; char month[10]; char day[10]; }; struct classmate { char name[20]; char num[20]; char sex[10]; char clas[40]; struct date birth; char time[20]; char specialit[20]; char remark[40]; }stud[N] = {NULL}; void add() { char j; front1: for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; system("cls"); /*清屏*/ PF("\n"); PF("\n請輸入要添加的姓名:"); SF("%s",stud[n].name); PF("\n請輸入要添加的學號(12位):"); SF("%s",&stud[n].num); PF("\n請輸入要添加的性別(男/女):"); SF("\n%s",&stud[n].sex); PF("\n請輸入要添加的班級:"); SF("%s",&stud[n].clas); PF("\n請輸入要添加的出生年份:"); SF("%s",&stud[n].birth.year); PF("\n請輸入要添加的出生月份:"); SF("%s",&stud[n].birth.month); PF("\n請輸入要添加的出生日子:"); SF("%s",&stud[n].birth.day); PF("\n請輸入要添加的入學日期:"); SF("%s",&stud[n].time); PF("\n請輸入要添加的專業:"); SF("%s",&stud[n].specialit); PF("\n請輸入要添加的備註:"); SF("%s",stud[n].remark); getchar(); n++; PF("是否繼續(Y/N)?:"); j=getchar(); getchar(); if(j=='y'||j=='Y') { n++; goto front1; } /*再輸入記錄*/ } void del() { int k = 0; char j, s[20]; front2:; for(m = 0;; m++) if(*stud[m].num == '\0') break; n = m; system("cls"); /*清屏*/ PF("請輸入要刪除的學號:\n"); getchar(); gets(s); for(i = 0; i < n; i++) if(strcmp(s , stud[i].num) == 0) { k=1;break; } /*查找記錄*/ if(k == 1) /*刪除記錄*/ { if(n == 1) { *stud[0].name = '\0'; *stud[0].num = '\0'; *stud[0].sex = '\0'; *stud[0].clas = '\0'; *stud[0].birth.year = '\0'; *stud[0].birth.month = '\0'; *stud[0].birth.day = '\0'; *stud[0].time = '\0'; *stud[0].specialit = '\0'; *stud[0].remark = '\0'; } else { for(k = i;k < n - 1; k++) { stud[k] = stud[k+1]; } *stud[n - 1].name = '\0'; *stud[n - 1].num = '\0'; *stud[n - 1].sex = '\0'; *stud[n - 1].clas = '\0'; *stud[n - 1].birth.year = '\0'; *stud[n - 1].birth.month = '\0'; *stud[n - 1].birth.day = '\0'; *stud[n - 1].time = '\0'; *stud[n - 1].specialit = '\0'; *stud[n - 1].remark = '\0'; } PF("已刪除\n\n"); } else { PF("找不到要刪除的記錄!\n"); PF("按回車鍵返回:"); getchar(); } PF("是否繼續(Y/N)?:"); j = getchar(); getchar(); if(j=='y'||j=='Y') goto front2; } void find() { int i,s = 0; char j,k[20]; for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; front3: s=0; system("cls"); /*清屏*/ PF("\n請輸入要查詢的學號: "); getchar(); gets(k); for(i = 0;i <= n; i++) if(strcmp(k,stud[i].num) == 0) { PF("\t\t姓名:%-10s\n",stud[i].name); PF("\t\t學號:%-10s\n",stud[i].num); PF("\t\t性別:%s\n",stud[i].sex); PF("\t\t班級:%-12s\n",stud[i].clas); PF("\t\t出生日期:%-4s 年 %-2s 月 %-2s 日\n",stud[i].birth.year,stud[i].birth.month,stud[i].birth.day); PF("\t\t入學日期:%s\n",stud[i].time); PF("\t\t專業:%s\n",stud[i].specialit); PF("\t\t備註:%s\n",stud[i].remark); s=1; } if(s==0) PF("查無此人!\n"); getchar(); PF("是否繼續查詢(Y/N)?:"); j=getchar();getchar(); if(j=='y'||j=='Y') goto front3; getchar(); } void arrange() { int k,i; struct classmate t; system("cls"); /*清屏*/ FILE *fp; int s; for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; for(k = 0;k < n - 1; k++) for(i = 0;i < n - k - 1; i++) if(strcmp(stud[i].num,stud[i+1].num) > 0) { t = stud[i]; stud[i] = stud[i+1]; stud[i+1] = t; } else continue; for(i=0;i<=n-1;i++) if(stud[k].num != 0) { PF("\t\t姓名:%-10s\n",stud[i].name); PF("\t\t學號:%-10s\n",stud[i].num); PF("\t\t性別:%s\n",stud[i].sex); PF("\t\t班級:%-12s\n",stud[i].clas); PF("\t\t出生日期:%-4s 年 %-2s 月 %-2s 日\n",stud[i].birth.year,stud[i].birth.month,stud[i].birth.day); PF("\t\t入學日期:%s\n",stud[i].time); PF("\t\t專業:%s\n",stud[i].specialit); PF("\t\t備註:%s\n\n",stud[i].remark); } PF("\t\t輸入回車返回主菜單"); getchar(); getchar(); } void change() { int k = 0; char j, s[20]; front5: system("cls"); /*清屏*/ for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; PF("\n請輸入要修改記錄的學號:"); getchar(); gets(s); for(i = 0;i < n; i++) if(strcmp(s , stud[i].num) == 0) { k = 1;break; } /*查找*/ if(k == 1) /*修改*/ { PF("\n"); PF("\n請輸入修改後的姓名:"); SF("%s",stud[i].name); PF("\n請輸入修改後的學號:"); SF("%s",&stud[i].num); PF("\n請輸入修改後的性別:"); SF("\n%s",&stud[i].sex); PF("\n請輸入修改後的班級:"); SF("%s",&stud[i].clas); PF("\n請輸入修改後的出生年:"); SF("%s",&stud[i].birth.year); PF("\n請輸入修改後的出生月:"); SF("%s",&stud[i].birth.month); PF("\n請輸入修改後的出生日:"); SF("%s",&stud[i].birth.day); PF("\n請輸入修改後的入學日期:"); SF("%s",&stud[n].time); PF("\n請輸入修改後的專業:"); SF("%s",&stud[n].specialit); PF("\n請輸入修改後的備註:"); SF("%s",stud[i].remark); PF("修改成功\n"); getchar(); } if(k==0) { PF("找不到要修改的記錄!\n"); PF("按回車鍵返回:"); getchar(); } getchar(); PF("是否繼續(Y/N)?:"); j=getchar(); getchar(); if(j=='y'||j=='Y') goto front5; } void show() { int s; for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; for(s = 0;s < n;s++) { PF("\t\t姓名:%-10s\n",stud[s].name); PF("\t\t學號:%-10s\n",stud[s].num); PF("\t\t性別:%s\n",stud[s].sex); PF("\t\t班級:%-12s\n",stud[s].clas); PF("\t\t出生日期:%-4s 年 %-2s 月 %-2s 日\n",stud[s].birth.year,stud[s].birth.month,stud[s].birth.day); PF("\t\t入學日期:%s\n",stud[s].time); PF("\t\t專業:%s\n",stud[s].specialit); PF("\t\t備註:%s\n\n",stud[s].remark); } PF("\t\t按回車鍵返回主菜單"); getchar(); getchar(); } void insert() { front9:; char j; for(m = 0;; m++) if(*stud[m].num== '\0')break; n = m; system("cls"); /*清屏*/ PF("\n"); PF("\n請輸入要插入的姓名:"); SF("%s",stud[n].name); PF("\n請輸入要插入的學號(12位):"); SF("%s",&stud[n].num); PF("\n請輸入要插入的性別(男/女):"); SF("\n%s",&stud[n].sex); PF("\n請輸入要插入的班級:"); SF("%s",&stud[n].clas); PF("\n請輸入要插入的出生年份:"); SF("%s",&stud[n].birth.year); PF("\n請輸入要插入的出生月份:"); SF("%s",&stud[n].birth.month); PF("\n請輸入要插入的出生日子:"); SF("%s",&stud[n].birth.day); PF("\n請輸入要插入的入學日期:"); SF("%s",&stud[n].time); PF("\n請輸入要插入的專業:"); SF("%s",&stud[n].specialit); PF("\n請輸入要插入的備註:"); SF("%s",stud[n].remark); getchar(); arrange(); front10:; PF("是否繼續(Y/N)?:"); j=getchar(); getchar(); if(j=='y'||j=='Y') { n++; goto front9; } } void main() { char j; PF("\n * * * * * * * * * * * * * * * * * * * * * * * * * * *"); PF("\n * 歡迎使用學生學籍管理系統 *"); PF("\n * 制作人:胡彬 *"); PF("\n * 2020年1月 *"); PF("\n * 按回車鍵進入主菜單: *"); PF("\n * * * * * * * * * * * * * * * * * * * * * * * * * * *"); if(( fp = fopen("student.txt","r")) == NULL)//載入已保存的學籍信息 { PF("\n 數據加載失敗!"); } else { fread(stud, sizeof(struct classmate), N, fp); fclose(fp); PF("\n 數據加載成功"); } getchar(); loop: system("cls"); PF("\n"); PF("\t\t ************\n"); PF("\t\t * 主菜單 *\n"); PF("\t\t ************\n"); PF("\t\t1.學生學籍信息錄入\n\n"); PF("\t\t2.學生學籍信息刪除\n\n"); PF("\t\t3.學生學籍信息查詢\n\n"); PF("\t\t4.學生學籍信息排序\n\n"); PF("\t\t5.學生學籍信息修改\n\n"); PF("\t\t6.學生學籍信息保存\n\n"); PF("\t\t7.退出系統\n\n"); PF("\t\t8.學生學籍信息顯示\n\n"); PF("\t\t9.學生學籍信息插入\n\n"); PF("\t\t請選擇[1/2/3/4/5/6/7/8]: "); j=getchar(); if(j=='\n') goto loop; /*返回主菜單*/ switch(j) { case '1': add(); goto loop; /*返回主菜單*/ case '2': del(); goto loop; case '3': find(); goto loop; case '4': arrange(); goto loop; case '5': change(); goto loop; case '6': { FILE *fp; fp=fopen("student.txt","w"); fwrite(stud,n*sizeof(struct classmate),1,fp); fclose(fp); goto loop; } case '7': exit(0); case '8': show(); goto loop; case '9': insert();goto loop; default: goto loop; } }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。