您好,登錄后才能下訂單哦!
本篇文章為大家展示了使用C語言怎么編寫一個學生信息管理系統,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
一.題目分析
1.功能概述
1)查詢學生信息
2)添加學生信息
3)修改學生信息
4)刪除學生信息
5)刷新學生信息
6)保存學生信息
7)輸出當前學生信息
2.題目要求:
1)使用結構體建立學生信息體制
2)實現七大基本功能
3)采用文件存儲學生信息
1.難點解析----對文件的操作
1.1文件讀取
FILE * fp; if ((fp = fopen(filename, "r")) == NULL) return 0; //從文件讀取信息 while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].StudentId, &stu[j].StudentName, &stu[j].StudentAge, &stu[j].StudentSex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) { j++; }
1.2文件寫入
FILE * fp; fp = fopen(filename, "w"); for (i = 0; i < n; i++){ fprintf(fp, "%s%s%d%c%.lf%.lf%.lf\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]); }
2.流程圖
3.七大基本功能----函數實現
3.1菜單函數:通過菜單建立用戶與程序之間的交流
void menu()/* 界面*/ { int num; printf(" \n\n \n\n"); printf(" ******************************************************\n\n"); printf(" * 學生信息管理系統 *\n \n"); printf(" ******************************************************\n\n"); printf("*********************系統功能菜單************************* \n"); printf(" ---------------------- ---------------------- \n"); printf(" ********************************************* \n"); printf(" * 0.系統幫助及說明 * * 1.刷新學生信息 * \n"); printf(" ********************************************* \n"); printf(" * 2.查詢學生信息 * * 3.修改學生信息 * \n"); printf(" ********************************************* \n"); printf(" * 4.增加學生信息 * * 5.按學號刪除信息 * \n"); printf(" ********************************************* \n"); printf(" * 6.顯示當前信息 * * 7.保存當前學生信息* \n"); printf(" ********************** ********************** \n"); printf(" * 8.退出系統 * \n"); printf(" ********************** \n"); printf(" ---------------------- ---------------------- \n"); printf("請選擇菜單編號:"); scanf("%d", &num); switch (num) { case 0:help(); break; case 1:flush(); break; case 2:seek(); break; case 3:modify(); break; case 4:insert(); break; case 5:del(); break; case 6:display(); break; case 7:save(); break; case 8: k = 0; printf("即將退出程序!\n"); break; default:printf("請在0-8之間選擇\n"); } }
3.2系統幫助與說明函數:適用于初次接觸學生信息管理系統的用戶參考
void help() { printf("\n0.歡迎使用系統幫助!\n"); printf("\n1.初次進入系統后,請先選擇增加學生信息;\n"); printf("\n2.按照菜單提示鍵入數字代號;\n"); printf("\n3.增加學生信息后,切記保存;\n"); printf("\n4.謝謝您的使用!\n"); }
3.3刷新學生信息函數
功能:調用刷新信息函數后,文件中再無學生信息
int flush(){ char filename[LEN + 1]; int i = 0; printf("請輸入要刷新學生信息的文件名:\n"); scanf("%s", filename); int j = 0; FILE * fp; if ((fp = fopen(filename, "r")) == NULL) return 0; //從文件讀取信息 while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].StudentId, &stu[j].StudentName, &stu[j].StudentAge, &stu[j].StudentSex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) { j++; } n = j; printf("刷新成功!!!"); return n; }
3.4查詢學生信息函數
功能:通過輸入要查詢的學生學號或者姓名,與系統中的學生信息進行對比,若相等,則輸出該學生的基本信息;反之,則輸出該學生在該管理系統中不存在
查詢方式:
1)按照學號查詢
2)按照姓名查詢
void seek() /*查找*/ { int i, item, flag; char s1[21]; /* 以姓名和學號最長長度+1為準*/ printf("------------------\n"); printf("-----1.按學號查詢-----\n"); printf("-----2.按姓名查詢-----\n"); printf("-----3.退出本菜單-----\n"); printf("------------------\n"); while (1) { printf("請選擇子菜單編號:"); scanf("%d", &item); flag = 0; switch (item) { case 1: printf("請輸入要查詢的學生的學號:\n"); scanf("%s", s1); for (i = 0; i<n; i++) if (strcmp(s1,stu[i].StudentId) == 0) { flag = 1; printf("學生學號\t學生姓名\t年齡\t性別\tC語言成績\t高等數學\t大學英語成績\n"); printf("--------------------------------------------------------------------\n"); printf("%s\t%s\t%d\t%6\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]); } if (0 == flag) printf("該學號不存在!\n"); break; case 2: printf("請輸入要查詢的學生的姓名:\n"); scanf("%s", s1); for (i = 0; i<n; i++) if (strcmp(stu[i].StudentName, s1) == 0) { flag = 1; printf("學生學號\t學生姓名\t年齡\t性別\tC語言成績\t高等數學\t大學英語成績\n"); printf("--------------------------------------------------------------------\n"); printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]); } if (0 == flag) printf("該姓名不存在!\n"); break; case 3:return; default:printf("請在1-3之間選擇\n"); } } }
3.5修改學生信息
功能:通過輸入學號來選擇要修改的該學號學生的信息內容,從而完成修改信息操作;
//修改學生信息 void modify() /*修改信息*/ { int i, item, num = -1; char sex1, s1[LEN + 1], s2[LEN + 1]; /* 以姓名和學號最長長度+1為準*/ float score1; printf("請輸入要要修改的學生的學號:\n"); scanf("%s", s1); for (i = 0; i < n; i++){ if (strcmp(stu[i].StudentId, s1) == 0){/*比較字符串是否相等*/ num = i; printf("------------------\n"); printf("1.修改姓名\n"); printf("2.修改年齡\n"); printf("3.修改性別\n"); printf("4.修改C語言成績\n"); printf("5.修改高等數學成績\n"); printf("6.修改大學英語成績\n"); printf("7.退出本菜單\n"); printf("------------------\n"); while (1) { printf("請選擇子菜單編號:"); scanf("%d", &item); switch (item) { case 1: printf("請輸入新的姓名:\n"); scanf("%s", s2); strcpy(stu[num].StudentName, s2); break; case 2: printf("請輸入新的年齡:\n"); scanf("%d", stu[num].StudentAge); break; case 3: printf("請輸入新的性別:\n"); scanf("%s", &sex1); stu[i].StudentSex = sex1; break; case 4: printf("請輸入新的C語言成績:\n"); scanf("%f", &score1); stu[num].score[0] = score1; break; case 5: printf("請輸入新的高等數學成績:\n"); scanf("%f", &score1); stu[num].score[1] = score1; break; case 6: printf("請輸入新的大學英語成績:\n"); scanf("%f", &score1); stu[num].score[2] = score1; break; case 7: return; default:printf("請在1-7之間選擇\n"); } } printf("修改完畢!請及時保存!\n"); } else{ printf("沒有該學生學號!!!"); } } }
3.6添加學生信息函數
功能:添加學生信息,并保存至文件中
//添加學生信息函數 void insert() /*插入函數*/ { int i = n, j, flag; printf("請輸入待增加的學生數:\n"); scanf("%d", &m); if (m > 0){ do { flag = 1; while (flag) { flag = 0; printf("請輸入第%d位學生的學號:\n", i + 1); scanf("%s", stu[i].StudentId); for (j = 0; j < i; j++){ if (strcmp(stu[i].StudentId, stu[j].StudentId) == 0){ printf("該學號已存在,請重新輸入!\n"); flag = 1; break; } } } printf("請輸入第%d 個學生的姓名:\n", i+1); scanf("%s", stu[i].StudentName); printf("請輸入第%d 個學生的年齡:\n", i+1); scanf("%d", &stu[i].StudentAge); printf("請輸入第%d 個學生的性別:\n", i+1); scanf(" %c", &stu[i].StudentSex); printf("請輸入第%d 個學生的C語言成績\n",i+1); scanf("%f", &stu[i].score[0]); printf("請輸入第%d 個學生的高等數學成績:\n", i+1); scanf("%f", &stu[i].score[1]); printf("請輸入第%d 個學生的大學英語成績:\n", i+1); scanf("%f", &stu[i].score[2]); if (0 == flag){ i++; } } while (i<n + m); } n += m; printf("學生信息增加完畢!!!\n"); system("pause"); }
3.7刪除學生信息函數
功能:通過輸入要刪除學生信息的學號,刪除該學生在該管理系統中的所有信息;
//刪除學生信息函數 void del() { int i, j, flag = 0; char s1[LEN + 1]; printf("請輸入要刪除學生的學號:\n"); scanf("%s", s1); for (i = 0; i < n; i++){ if (strcpy(stu[i].StudentId, s1) == 0){ flag = 1; //要刪除學生后面的學生往前移一位 for (j = i; j < n - 1; j++){ stu[j] = stu[j + 1]; } } } //查找失敗 if (0 == flag){ printf("該學號不存在!!!\n"); } if (1 == flag){ printf("刪除成功!!!"); //刪除成功,學生人數減1 n--; } system("pause"); }
3.8顯示當前學生信息
功能:可以輸出進行多種操作后的學生信息管理系統中的所有學生信息;
//顯示全部數據信息 void display() { int i; printf("共有%d位學生的信息:\n", n); if (0 != n) { printf("學生學號 \t學生姓名 \t年齡 \t性別 \tC語言成績\t高等數學 \t大學英語成績\n"); printf("--------------------------------------------------------------------\n"); for (i = 0; i<n; i++) { printf("%s \t%s \t%d \t%c \t%.1f\t%.1f \t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0],stu[i].score[1],stu[i].score[2]); } } system("pause"); }
3.8保存學生信息
功能:將進行某些操作后的學生信息保存到指定文件中
void save(){ int i; FILE *fp; char filename[LEN + 1]; printf("請輸入要保存的文件名:\n"); scanf("%s", filename); fp = fopen(filename, "w"); for (i = 0; i < n; i++){ fprintf(fp, "%s%s%d%c%.lf%.lf%.lf\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]); } printf("保存成功!!!\n"); fclose(fp); system("pause"); }
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> /*I/O函數*/ #include<stdlib.h> /*其它說明*/ #include<string.h> /*字符串函數*/ #define LEN 15 /* 學號和姓名最大字符數,實際請更改*/ #define N 50 /* 最大學生人數,實際請更改*/ int k = 1, n = 0, m = 0;/* n代表當前記錄的學生人數*/ //函數聲明 void readfile(); void seek(); void modify(); void insert(); void del(); void display(); void save(); void menu(); //結構體保存學生信息 struct student{ char StudentId[LEN+1]; char StudentName[LEN+1]; int StudentAge; char StudentSex; float score[3]; }stu[N]; //主函數 int main() { while (k) { menu(); } system("pause"); return 0; } //系統幫助函數 void help() { printf("\n0.歡迎使用系統幫助!\n"); printf("\n1.初次進入系統后,請先選擇增加學生信息;\n"); printf("\n2.按照菜單提示鍵入數字代號;\n"); printf("\n3.增加學生信息后,切記保存;\n"); printf("\n4.謝謝您的使用!\n"); } //刷新文件 int flush(){ char filename[LEN + 1]; int i = 0; printf("請輸入要刷新學生信息的文件名:\n"); scanf("%s", filename); int j = 0; FILE * fp; if ((fp = fopen(filename, "r")) == NULL) return 0; //從文件讀取信息 while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].StudentId, &stu[j].StudentName, &stu[j].StudentAge, &stu[j].StudentSex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) { j++; } n = j; printf("刷新成功!!!"); return n; } //查找學生信息 void seek() /*查找*/ { int i, item, flag; char s1[21]; /* 以姓名和學號最長長度+1為準*/ printf("------------------\n"); printf("-----1.按學號查詢-----\n"); printf("-----2.按姓名查詢-----\n"); printf("-----3.退出本菜單-----\n"); printf("------------------\n"); while (1) { printf("請選擇子菜單編號:"); scanf("%d", &item); flag = 0; switch (item) { case 1: printf("請輸入要查詢的學生的學號:\n"); scanf("%s", s1); for (i = 0; i<n; i++) if (strcmp(s1,stu[i].StudentId) == 0) { flag = 1; printf("學生學號\t學生姓名\t年齡\t性別\tC語言成績\t高等數學\t大學英語成績\n"); printf("--------------------------------------------------------------------\n"); printf("%s\t%s\t%d\t%6\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]); } if (0 == flag) printf("該學號不存在!\n"); break; case 2: printf("請輸入要查詢的學生的姓名:\n"); scanf("%s", s1); for (i = 0; i<n; i++) if (strcmp(stu[i].StudentName, s1) == 0) { flag = 1; printf("學生學號\t學生姓名\t年齡\t性別\tC語言成績\t高等數學\t大學英語成績\n"); printf("--------------------------------------------------------------------\n"); printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]); } if (0 == flag) printf("該姓名不存在!\n"); break; case 3:return; default:printf("請在1-3之間選擇\n"); } } } //修改學生信息 void modify() /*修改信息*/ { int i, item, num = -1; char sex1, s1[LEN + 1], s2[LEN + 1]; /* 以姓名和學號最長長度+1為準*/ float score1; printf("請輸入要要修改的學生的學號:\n"); scanf("%s", s1); for (i = 0; i < n; i++){ if (strcmp(stu[i].StudentId, s1) == 0){/*比較字符串是否相等*/ num = i; printf("------------------\n"); printf("1.修改姓名\n"); printf("2.修改年齡\n"); printf("3.修改性別\n"); printf("4.修改C語言成績\n"); printf("5.修改高等數學成績\n"); printf("6.修改大學英語成績\n"); printf("7.退出本菜單\n"); printf("------------------\n"); while (1) { printf("請選擇子菜單編號:"); scanf("%d", &item); switch (item) { case 1: printf("請輸入新的姓名:\n"); scanf("%s", s2); strcpy(stu[num].StudentName, s2); break; case 2: printf("請輸入新的年齡:\n"); scanf("%d", stu[num].StudentAge); break; case 3: printf("請輸入新的性別:\n"); scanf("%s", &sex1); stu[i].StudentSex = sex1; break; case 4: printf("請輸入新的C語言成績:\n"); scanf("%f", &score1); stu[num].score[0] = score1; break; case 5: printf("請輸入新的高等數學成績:\n"); scanf("%f", &score1); stu[num].score[1] = score1; break; case 6: printf("請輸入新的大學英語成績:\n"); scanf("%f", &score1); stu[num].score[2] = score1; break; case 7: return; default:printf("請在1-7之間選擇\n"); } } printf("修改完畢!請及時保存!\n"); } else{ printf("沒有該學生學號!!!"); } } } void sort()//按學號排序 { int i, j, k, *p, *q, s; char temp[LEN + 1], ctemp; float ftemp; for (i = 0; i<n - 1; i++) { for (j = n - 1; j>i; j--) if (strcmp(stu[j - 1].StudentId, stu[j].StudentId)>0) { strcpy(temp, stu[j - 1].StudentId); strcpy(stu[j - 1].StudentId, stu[j].StudentId); strcpy(stu[j].StudentId, temp); strcpy(temp, stu[j - 1].StudentName); strcpy(stu[j - 1].StudentName, stu[j].StudentName); strcpy(stu[j].StudentName, temp); ctemp = stu[j - 1].StudentSex; stu[j - 1].StudentSex = stu[j].StudentSex; stu[j].StudentSex = ctemp; p = &stu[j - 1].StudentAge; q = &stu[j].StudentAge; s = *q; *q = *p; *p = s; for (k = 0; k<3; k++) { ftemp = stu[j - 1].score[k]; stu[j - 1].score[k] = stu[j].score[k]; stu[j].score[k] = ftemp; } } } } //添加學生信息函數 void insert() /*插入函數*/ { int i = n, j, flag; printf("請輸入待增加的學生數:\n"); scanf("%d", &m); if (m > 0){ do { flag = 1; while (flag) { flag = 0; printf("請輸入第%d位學生的學號:\n", i + 1); scanf("%s", stu[i].StudentId); for (j = 0; j < i; j++){ if (strcmp(stu[i].StudentId, stu[j].StudentId) == 0){ printf("該學號已存在,請重新輸入!\n"); flag = 1; break; } } } printf("請輸入第%d 個學生的姓名:\n", i+1); scanf("%s", stu[i].StudentName); printf("請輸入第%d 個學生的年齡:\n", i+1); scanf("%d", &stu[i].StudentAge); printf("請輸入第%d 個學生的性別:\n", i+1); scanf(" %c", &stu[i].StudentSex); printf("請輸入第%d 個學生的C語言成績\n",i+1); scanf("%f", &stu[i].score[0]); printf("請輸入第%d 個學生的高等數學成績:\n", i+1); scanf("%f", &stu[i].score[1]); printf("請輸入第%d 個學生的大學英語成績:\n", i+1); scanf("%f", &stu[i].score[2]); if (0 == flag){ i++; } } while (i<n + m); } n += m; printf("學生信息增加完畢!!!\n"); system("pause"); } //刪除學生信息函數 void del() { int i, j, flag = 0; char s1[LEN + 1]; printf("請輸入要刪除學生的學號:\n"); scanf("%s", s1); for (i = 0; i < n; i++){ if (strcpy(stu[i].StudentId, s1) == 0){ flag = 1; //要刪除學生后面的學生往前移一位 for (j = i; j < n - 1; j++){ stu[j] = stu[j + 1]; } } } //查找失敗 if (0 == flag){ printf("該學號不存在!!!\n"); } if (1 == flag){ printf("刪除成功!!!"); //刪除成功,學生人數減1 n--; } system("pause"); } //顯示全部數據信息 void display() { int i; printf("共有%d位學生的信息:\n", n); if (0 != n) { printf("學生學號 \t學生姓名 \t年齡 \t性別 \tC語言成績\t高等數學 \t大學英語成績\n"); printf("--------------------------------------------------------------------\n"); for (i = 0; i<n; i++) { printf("%s \t%s \t%d \t%c \t%.1f\t%.1f \t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0],stu[i].score[1],stu[i].score[2]); } } system("pause"); } void save(){ int i; FILE *fp; char filename[LEN + 1]; printf("請輸入要保存的文件名:\n"); scanf("%s", filename); fp = fopen(filename, "w"); for (i = 0; i < n; i++){ fprintf(fp, "%s%s%d%c%.lf%.lf%.lf\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]); } printf("保存成功!!!\n"); fclose(fp); system("pause"); } void menu()/* 界面*/ { int num; printf(" \n\n \n\n"); printf(" ******************************************************\n\n"); printf(" * 學生信息管理系統 *\n \n"); printf(" ******************************************************\n\n"); printf("*********************系統功能菜單************************* \n"); printf(" ---------------------- ---------------------- \n"); printf(" ********************************************* \n"); printf(" * 0.系統幫助及說明 * * 1.刷新學生信息 * \n"); printf(" ********************************************* \n"); printf(" * 2.查詢學生信息 * * 3.修改學生信息 * \n"); printf(" ********************************************* \n"); printf(" * 4.增加學生信息 * * 5.按學號刪除信息 * \n"); printf(" ********************************************* \n"); printf(" * 6.顯示當前信息 * * 7.保存當前學生信息* \n"); printf(" ********************** ********************** \n"); printf(" * 8.退出系統 * \n"); printf(" ********************** \n"); printf(" ---------------------- ---------------------- \n"); printf("請選擇菜單編號:"); scanf("%d", &num); switch (num) { case 0:help(); break; case 1:flush(); break; case 2:seek(); break; case 3:modify(); break; case 4:insert(); break; case 5:del(); break; case 6:display(); break; case 7:save(); break; case 8: k = 0; printf("即將退出程序!\n"); break; default:printf("請在0-8之間選擇\n"); } }
1.調試:
2.測試:
輸入數據類型與定義時不符合,程序運行過程中會出現錯誤
3.實驗結果:
(1)~(9)是一個連續的運行實驗結果
(1)運行菜單
(2)添加學生信息
(3)保存學生信息
(4)顯示全部信息
(5)修改學生信息
(6)顯示修改后全部信息
(7)刷新學生信息
(8)保存學生信息
(9)顯示刷新后的全部信息
上述內容就是使用C語言怎么編寫一個學生信息管理系統,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。