数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)
寫在前面:歡迎來到「湫歌」的博客。我是秋秋,一名普通的在校大學(xué)生。在學(xué)習(xí)之余,用博客來記錄我學(xué)習(xí)過程中的點(diǎn)點(diǎn)滴滴,也希望我的博客能夠更給同樣熱愛學(xué)習(xí)熱愛技術(shù)的你們帶來收獲!希望大家多多關(guān)照,我們一起成長一起進(jìn)步。也希望大家多多支持我鴨,喜歡我就給我一個(gè)關(guān)注吧!
課程題目:學(xué)生成績查詢與分析系統(tǒng)
1、學(xué)生信息包括:學(xué)號、姓名、性別、四門課成績
2、系統(tǒng)要求:分為兩個(gè)版本系統(tǒng),老師版和學(xué)生版,老師版需要輸入密碼進(jìn)入老師版系統(tǒng),在老師版系統(tǒng)中可以刪除和修改學(xué)生成績。學(xué)生版系統(tǒng)不需要輸入密碼,但不可以修改和刪除學(xué)生成績。
3、功能要求:如果選擇“輸入學(xué)生信息”,則顯示“請輸入學(xué)生姓名、學(xué)號、成績”,并能輸入;選擇“學(xué)生姓名查找”,可以按照姓名查找該學(xué)生的各科成績和平均分;選擇“學(xué)生學(xué)號查找”,可以按照學(xué)號查找該學(xué)生的各科成績和平均分,選擇“按照姓名排序”,可以顯示按姓名排序結(jié)果;選擇“按照學(xué)號排序”,可以顯示按學(xué)號排序結(jié)果;選擇“按照總成績排序”,可以顯示按成績排序結(jié)果;選擇“按照學(xué)號查找學(xué)生信息”,可以按照學(xué)號輸出學(xué)生姓名,學(xué)號,成績;選擇“按照姓名查找學(xué)生信息”,可以按照姓名輸出學(xué)生姓名,學(xué)號,成績;選擇0,顯示“謝謝使用”;選擇其他則顯示“輸入錯(cuò)誤,請重新輸入)。
4、基本要求:用C語言實(shí)現(xiàn)程序設(shè)計(jì);
利用結(jié)構(gòu)體數(shù)組、鏈表等實(shí)現(xiàn)學(xué)生信息表達(dá)、查詢等,充分體現(xiàn)數(shù)據(jù)結(jié)構(gòu)的知識;
系統(tǒng)的各個(gè)功能模塊要求用函數(shù)的形式實(shí)現(xiàn);
界面友好(良好的人機(jī)交互),程序要有注釋。
程序中所用到的排序查找方法需采用數(shù)據(jù)結(jié)構(gòu)中所學(xué)方法實(shí)現(xiàn),要求方法實(shí)用效率高。
一、結(jié)構(gòu)體與鏈表
1、學(xué)生信息結(jié)構(gòu)體
//學(xué)生信息結(jié)構(gòu)體 typedef struct {int num;//學(xué)號char name[50];//姓名char sex[50];float chengji1, chengji2, chengji3, chengji4;float sum, average;int score; }student;2、鏈表結(jié)構(gòu)體
//鏈表的結(jié)構(gòu)體 typedef struct LNode {student data;struct LNode* next; }LNode, * LinkList;二、總體功能設(shè)計(jì)
1、菜單頁
系統(tǒng)主菜單?
//主菜單 void menu() {system("cls");printf("主菜單==============\n");printf("0.退出系統(tǒng)\n");printf("1.選擇教師版系統(tǒng)\n");printf("2.選擇學(xué)生版系統(tǒng)\n");printf("===================\n");printf("請選擇(0-2)\n");printf("\n"); }?老師版系統(tǒng)菜單
//老師版菜單 void teachermenu() {system("cls");printf("老師版系統(tǒng)==========\n");printf("0.返回主菜單\n");printf("1.輸入學(xué)生信息\n");printf("2.按姓名查詢學(xué)生信息\n");printf("3.按學(xué)號查找學(xué)生信息\n");printf("4.修改學(xué)生信息\n");printf("5.刪除學(xué)生信息\n");printf("6.按姓名排序\n");printf("7.按學(xué)號排序\n");printf("8.按總成績排序\n");printf("9.打印學(xué)生信息\n");printf("===================\n");printf("請選擇(0-9)\n");printf("\n"); }學(xué)生版系統(tǒng)菜單?
//學(xué)生版菜單 void studentmenu() {system("cls");printf("學(xué)生版系統(tǒng)==========\n");printf("0.返回主菜單\n");printf("1.按姓名查詢學(xué)生信息\n");printf("2.按學(xué)號查找學(xué)生信息\n");printf("3.按姓名排序\n");printf("4.按學(xué)號排序\n");printf("5.按總成績排序\n");printf("6.打印學(xué)生信息\n");printf("===================\n");printf("請選擇(0-6)\n");printf("\n"); }2、主要功能
功能一——輸入學(xué)生信息
//輸入學(xué)生信息 void input(LinkList& L) {FILE* outfile;outfile = fopen("student.txt", "a+");float sum, average;printf("請輸入學(xué)生信息\n");LNode* p = new LNode;p = L;while (p->next != NULL) {p = p->next;}for (;;) {LNode* q = new LNode;q->next = NULL;printf("請輸入學(xué)生學(xué)號\n");cin >> q->data.num;printf("請輸入學(xué)生姓名\n");cin >> q->data.name;printf("請輸入學(xué)生性別\n");cin >> q->data.sex;printf("請依次輸入四門課程的成績(python,java,c++,數(shù)據(jù)結(jié)構(gòu))\n");cin >> q->data.chengji1 >> q->data.chengji2 >> q->data.chengji3 >> q->data.chengji4;q->data.sum = q->data.chengji1 + q->data.chengji2 + q->data.chengji3 + q->data.chengji4;q->data.average = q->data.sum / 4.0;if (outfile == NULL) {printf("不能打開文件\n");}else {fprintf(outfile, "%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",q->data.num, q->data.name, q->data.sex, q->data.chengji1, q->data.chengji2, q->data.chengji3, q->data.chengji4, q->data.sum, q->data.average);fclose(outfile);}p->next = q;p = q;L->data.score++;int j;printf("若繼續(xù)輸入學(xué)生信息則輸入1,返回主菜單則輸入0\n");scanf("%d", &j);//若用戶輸入1,則繼續(xù)輸入學(xué)生信息if (j == 1) {N++;continue;}//若用戶輸入0,則返回主菜單else{break;}}system("pause"); }功能二——按姓名查詢學(xué)生信息
//姓名查找 int xingmingchazhao(LinkList& L) {char ch[50];bool flag = true;printf("請輸入查詢學(xué)生的姓名:");cin >> ch;LNode* p = new LNode;p = L;int m;while (p->next != NULL) {if (strcmp(p->data.name, ch) == 0) {printf("請輸入要查詢的學(xué)生成績的學(xué)科\n");printf("0、返回上一頁面 1、Python 2、Java 3、C++ 4、數(shù)據(jù)結(jié)構(gòu) 5、總成績 6、平均分 7、所有數(shù)據(jù)信息\n");scanf("%d", &m);if (m == 0 || m == 1 || m == 2 || m == 3 || m == 4 || m == 5 || m == 6 || m == 7) {switch (m){case 0:return 0;case 1: {printf("Python分?jǐn)?shù):%.2f\n", p->data.chengji1);break;}case 2: {printf("Java分?jǐn)?shù):%.2f\n", p->data.chengji2);break;}case 3: {printf("C++分?jǐn)?shù):%.2f\n", p->data.chengji3);break;}case 4: {printf("數(shù)據(jù)結(jié)構(gòu)分?jǐn)?shù):%.2f\n", p->data.chengji4);break;}case 5: {printf("總成績:%.2f\n", p->data.sum);break;}case 6: {printf("平均分:%.2f\n", p->data.average);break;}case 7: {printf("學(xué)號\t姓名\t性別\tPython\tJava\tC++\t數(shù)據(jù)結(jié)構(gòu)\t總成績\t平均分\n");printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t%.2f\n",p->data.num, p->data.name, p->data.sex, p->data.chengji1, p->data.chengji2,p->data.chengji3, p->data.chengji4, p->data.sum, p->data.average);break;}}}else {printf("輸入錯(cuò)誤請重新輸入\n");system("pause");}flag = false;}p = p->next;}if (flag) {printf("系統(tǒng)沒有該學(xué)生信息!");system("pause");}system("pause"); }功能三——按學(xué)號查找學(xué)生信息
//學(xué)號查找 int xuehaochazhao(LinkList& L) {int ch;int m;bool flag = true;printf("請輸入查詢學(xué)生的學(xué)號:");cin >> ch;LNode* p = new LNode;p = L;while (p->next != NULL) {if (ch==p->data.num) {printf("請輸入要查詢的學(xué)生成績的學(xué)科\n");printf("0、返回上一頁面 1、Python 2、Java 3、C++ 4、數(shù)據(jù)結(jié)構(gòu) 5、總成績 6、平均分 7、所有數(shù)據(jù)信息\n");scanf("%d", &m);if (m == 0 || m == 1 || m == 2 || m == 3 || m == 4 || m == 5 || m == 6||m==7) {switch (m){case 0:return 0;case 1: {printf("Python分?jǐn)?shù):%.2f\n", p->data.chengji1);break;}case 2: {printf("Java分?jǐn)?shù):%.2f\n", p->data.chengji2);break;}case 3: {printf("C++分?jǐn)?shù):%.2f\n", p->data.chengji3);break;}case 4: {printf("數(shù)據(jù)結(jié)構(gòu)分?jǐn)?shù):%.2f\n", p->data.chengji4);break;}case 5: {printf("總成績:%.2f\n", p->data.sum);break;}case 6: {printf("平均分:%.2f\n", p->data.average);break;}case 7: {printf("學(xué)號\t姓名\t性別\tPython\tJava\tC++\t數(shù)據(jù)結(jié)構(gòu)\t總成績\t平均分\n");printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t%.2f\n",p->data.num, p->data.name, p->data.sex, p->data.chengji1, p->data.chengji2,p->data.chengji3, p->data.chengji4, p->data.sum, p->data.average);}}}else {printf("輸入錯(cuò)誤請重新輸入\n");system("pause");}flag = false;}p = p->next;}if (flag) {printf("系統(tǒng)沒有該學(xué)生信息!");system("pause");}system("pause"); }功能四——?jiǎng)h除學(xué)生信息
//刪除信息 void cut(LinkList& L) {printf("請輸入要?jiǎng)h除的學(xué)生學(xué)號:");int n;bool flag = true;cin >> n;LNode* p = new LNode;p = L;while (p->next != NULL){if (n == p->next->data.num){p->next = p->next->next;p = L; //又從頭開始遍歷,避免忽略掉連續(xù)數(shù)據(jù)相同的情況flag = false;continue;}p = p->next;}if (flag) {printf("系統(tǒng)沒有該學(xué)生信息!\n");}else {printf("刪除成功!\n");}system("pause"); }功能五——修改學(xué)生信息
//修改成績 void change(LinkList& L) {printf("請輸入要修改的學(xué)生學(xué)號:");int n;bool flag = true;cin >> n;LNode* p = new LNode;p = L;while (p != NULL){if (n == p->data.num) {printf("請輸入修改的成績:\n");printf("該學(xué)生姓名為:%s\n", p->data.name);printf("Python成績: %.2f,新成績?yōu)?", p->data.chengji1);cin >> p->data.chengji1;printf("Java成績: %.2f,新成績?yōu)?", p->data.chengji2);cin >> p->data.chengji2;printf("C++成績: %.2f,新成績?yōu)?", p->data.chengji3);cin >> p->data.chengji3;printf("數(shù)據(jù)結(jié)構(gòu)成績: %.2f,新成績?yōu)?", p->data.chengji4);cin >> p->data.chengji4;printf("修改成功!\n");system("pause");flag = false;}p = p->next;}if (flag) {printf("系統(tǒng)沒有該學(xué)生信息!");}system("pause"); }功能六——按姓名排序
//按姓名排序 void xingmingpaixu(LinkList& L) {LNode* Q = new LNode;Q->next = NULL;paixubeifen(L);duqubeifen(Q);LNode* p = new LNode;p = Q;LNode* max = new LNode;max=Q;if (Q->next == NULL) {printf("學(xué)號\t姓名\t性別\tPython\tJava\tC++\t數(shù)據(jù)結(jié)構(gòu)\t總成績\t平均分\n");printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);}else {printf("學(xué)號\t姓名\t性別\t成績1\t成績2\t成績3\t成績4\t總成績\t平均分\n");for (;p != NULL;p = p->next) {for (max = p->next;max != NULL;max = max->next) {if (strcmp(p->data.name,max->data.name)<0) {student tmp = p->data;p->data = max->data;max->data = tmp;}}}while (Q->next != NULL) {Q = Q->next;printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);}}system("pause"); }功能七——按學(xué)號排序
//按學(xué)號排序 void xuehaopaixu(LinkList& L) {LNode* Q = new LNode;Q->next = NULL;paixubeifen(L);duqubeifen(Q);LNode* p = new LNode;p = Q;LNode* max = new LNode;if (Q->next == NULL) {printf("學(xué)號\t姓名\t性別\tPython\tJava\tC++\t數(shù)據(jù)結(jié)構(gòu)\t總成績\t平均分\n");printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);}else {printf("學(xué)號\t姓名\t性別\t成績1\t成績2\t成績3\t成績4\t總成績\t平均分\n");for (;p != NULL;p = p->next) {for (max = p->next;max != NULL;max = max->next) {if (max->data.num < p->data.num) {student tmp = p->data;p->data = max->data;max->data = tmp;}}}while (Q->next != NULL) {Q = Q->next;printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);}}system("pause"); }功能八——按總成績排序
//按總成績排序 void zongchengjipaixu(LinkList& L) {LNode* Q = new LNode;Q->next = NULL;paixubeifen(L);duqubeifen(Q);LNode* p = new LNode;p = Q;LNode* max = new LNode;if (Q->next == NULL) {printf("學(xué)號\t姓名\t性別\tPython\tJava\tC++\t數(shù)據(jù)結(jié)構(gòu)\t總成績\t平均分\n");printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);}else {printf("學(xué)號\t姓名\t性別\tPython\tJava\tC++\t數(shù)據(jù)結(jié)構(gòu)\t總成績\t平均分\n");for (;p != NULL;p = p->next) {for (max = p->next;max != NULL;max = max->next) {if (max->data.sum > p->data.sum) {student tmp = p->data;p->data = max->data;max->data = tmp;}}}while (Q->next != NULL) { printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);Q = Q->next;}}system("pause"); }功能九——打印學(xué)生信息
//打印學(xué)生信息 void dayingxueshengxinxi(LinkList& L) {if (L->data.score == 0) {printf("該系統(tǒng)暫時(shí)沒有學(xué)生信息\n");}else {LNode* q = new LNode;q = L;printf("學(xué)號\t姓名\t性別\tPython\tJava\tC++\t數(shù)據(jù)結(jié)構(gòu)\t總成績\t平均分\n");while (q->next != NULL) {q = q->next;printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",q->data.num, q->data.name, q->data.sex, q->data.chengji1, q->data.chengji2,q->data.chengji3, q->data.chengji4, q->data.sum, q->data.average);}}system("pause"); }//存入文件 void save(LinkList& L) {FILE* outfile;outfile = fopen("student.txt", "w+");LNode* q = new LNode;q = L;if (outfile == NULL) {printf("不能打開該文件\n");_getch();}else {while (q->next != NULL) {q = q->next;fprintf(outfile,"%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",q->data.num, q->data.name, q->data.sex, q->data.chengji1, q->data.chengji2,q->data.chengji3, q->data.chengji4, q->data.sum, q->data.average);}}fclose(outfile); }相關(guān)資源及源代碼:(1條消息) 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)c語言學(xué)生管理系統(tǒng)(簡單詳細(xì)版)-C/C++文檔類資源-CSDN文庫
總結(jié)
以上是生活随笔為你收集整理的数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2575):vue-route
- 下一篇: Windows 7常见蓝屏代码解决办法