数据结构|数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)


写在前面:欢迎来到「湫歌」的博客。我是秋秋,一名普通的在校大学生。在学习之余,用博客来记录我学习过程中的点点滴滴,也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获!希望大家多多关照,我们一起成长一起进步。也希望大家多多支持我鸭,喜欢我就给我一个关注吧!

课程题目:学生成绩查询与分析系统
1、学生信息包括:学号、姓名、性别、四门课成绩
2、系统要求:分为两个版本系统,老师版和学生版,老师版需要输入密码进入老师版系统,在老师版系统中可以删除和修改学生成绩。学生版系统不需要输入密码,但不可以修改和删除学生成绩。
3、功能要求:如果选择“输入学生信息”,则显示“请输入学生姓名、学号、成绩”,并能输入;选择“学生姓名查找”,可以按照姓名查找该学生的各科成绩和平均分;选择“学生学号查找”,可以按照学号查找该学生的各科成绩和平均分,选择“按照姓名排序”,可以显示按姓名排序结果;选择“按照学号排序”,可以显示按学号排序结果;选择“按照总成绩排序”,可以显示按成绩排序结果;选择“按照学号查找学生信息”,可以按照学号输出学生姓名,学号,成绩;选择“按照姓名查找学生信息”,可以按照姓名输出学生姓名,学号,成绩;选择0,显示“谢谢使用”;选择其他则显示“输入错误,请重新输入)。
4、基本要求:用C语言实现程序设计;
利用结构体数组、链表等实现学生信息表达、查询等,充分体现数据结构的知识;
系统的各个功能模块要求用函数的形式实现;
界面友好(良好的人机交互),程序要有注释。
程序中所用到的排序查找方法需采用数据结构中所学方法实现,要求方法实用效率高。
一、结构体与链表 1、学生信息结构体
//学生信息结构体 typedef struct { int num; //学号 char name[50]; //姓名 char sex[50]; float chengji1, chengji2, chengji3, chengji4; float sum, average; int score; }student;

2、链表结构体
//链表的结构体 typedef struct LNode { student data; struct LNode* next; }LNode, * LinkList;

二、总体功能设计 1、菜单页 系统主菜单
//主菜单 void menu() { system("cls"); printf("主菜单==============\n"); printf("0.退出系统\n"); printf("1.选择教师版系统\n"); printf("2.选择学生版系统\n"); printf("===================\n"); printf("请选择(0-2)\n"); printf("\n"); }

老师版系统菜单
//老师版菜单 void teachermenu() { system("cls"); printf("老师版系统==========\n"); printf("0.返回主菜单\n"); printf("1.输入学生信息\n"); printf("2.按姓名查询学生信息\n"); printf("3.按学号查找学生信息\n"); printf("4.修改学生信息\n"); printf("5.删除学生信息\n"); printf("6.按姓名排序\n"); printf("7.按学号排序\n"); printf("8.按总成绩排序\n"); printf("9.打印学生信息\n"); printf("===================\n"); printf("请选择(0-9)\n"); printf("\n"); }

学生版系统菜单
//学生版菜单 void studentmenu() { system("cls"); printf("学生版系统==========\n"); printf("0.返回主菜单\n"); printf("1.按姓名查询学生信息\n"); printf("2.按学号查找学生信息\n"); printf("3.按姓名排序\n"); printf("4.按学号排序\n"); printf("5.按总成绩排序\n"); printf("6.打印学生信息\n"); printf("===================\n"); printf("请选择(0-6)\n"); printf("\n"); }

2、主要功能 功能一——输入学生信息
//输入学生信息 void input(LinkList& L) { FILE* outfile; outfile = fopen("student.txt", "a+"); float sum, average; printf("请输入学生信息\n"); LNode* p = new LNode; p = L; while (p->next != NULL) { p = p->next; } for (; ; ) { LNode* q = new LNode; q->next = NULL; printf("请输入学生学号\n"); cin >> q->data.num; printf("请输入学生姓名\n"); cin >> q->data.name; printf("请输入学生性别\n"); cin >> q->data.sex; printf("请依次输入四门课程的成绩(python,java,c++,数据结构)\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("若继续输入学生信息则输入1,返回主菜单则输入0\n"); scanf("%d", &j); //若用户输入1,则继续输入学生信息 if (j == 1) {N++; continue; } //若用户输入0,则返回主菜单 else{break; } } system("pause"); }

功能二——按姓名查询学生信息
//姓名查找 int xingmingchazhao(LinkList& L) { char ch[50]; bool flag = true; printf("请输入查询学生的姓名:"); cin >> ch; LNode* p = new LNode; p = L; int m; while (p->next != NULL) { if (strcmp(p->data.name, ch) == 0) {printf("请输入要查询的学生成绩的学科\n"); printf("0、返回上一页面 1、Python 2、Java 3、C++ 4、数据结构 5、总成绩 6、平均分 7、所有数据信息\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分数:%.2f\n", p->data.chengji1); break; } case 2: {printf("Java分数:%.2f\n", p->data.chengji2); break; } case 3: {printf("C++分数:%.2f\n", p->data.chengji3); break; } case 4: {printf("数据结构分数:%.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("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\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("输入错误请重新输入\n"); system("pause"); }flag = false; } p = p->next; } if (flag) { printf("系统没有该学生信息!"); system("pause"); } system("pause"); }

功能三——按学号查找学生信息
//学号查找 int xuehaochazhao(LinkList& L) { int ch; int m; bool flag = true; printf("请输入查询学生的学号:"); cin >> ch; LNode* p = new LNode; p = L; while (p->next != NULL) { if (ch==p->data.num) {printf("请输入要查询的学生成绩的学科\n"); printf("0、返回上一页面 1、Python 2、Java 3、C++ 4、数据结构 5、总成绩 6、平均分 7、所有数据信息\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分数:%.2f\n", p->data.chengji1); break; } case 2: {printf("Java分数:%.2f\n", p->data.chengji2); break; } case 3: {printf("C++分数:%.2f\n", p->data.chengji3); break; } case 4: {printf("数据结构分数:%.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("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\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("输入错误请重新输入\n"); system("pause"); }flag = false; } p = p->next; } if (flag) { printf("系统没有该学生信息!"); system("pause"); } system("pause"); }

功能四——删除学生信息
//删除信息 void cut(LinkList& L) { printf("请输入要删除的学生学号:"); 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; //又从头开始遍历,避免忽略掉连续数据相同的情况 flag = false; continue; } p = p->next; } if (flag) { printf("系统没有该学生信息!\n"); } else { printf("删除成功!\n"); } system("pause"); }

功能五——修改学生信息
//修改成绩 void change(LinkList& L) { printf("请输入要修改的学生学号:"); int n; bool flag = true; cin >> n; LNode* p = new LNode; p = L; while (p != NULL) { if (n == p->data.num) { printf("请输入修改的成绩:\n"); printf("该学生姓名为:%s\n", p->data.name); printf("Python成绩: %.2f,新成绩为:", p->data.chengji1); cin >> p->data.chengji1; printf("Java成绩: %.2f,新成绩为:", p->data.chengji2); cin >> p->data.chengji2; printf("C++成绩: %.2f,新成绩为:", p->data.chengji3); cin >> p->data.chengji3; printf("数据结构成绩: %.2f,新成绩为:", p->data.chengji4); cin >> p->data.chengji4; printf("修改成功!\n"); system("pause"); flag = false; } p = p->next; } if (flag) { printf("系统没有该学生信息!"); } 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("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\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("学号\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 = https://www.it610.com/article/max->data; max->data = https://www.it610.com/article/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 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("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\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("学号\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 = https://www.it610.com/article/max->data; max->data = https://www.it610.com/article/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("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\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("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\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 = https://www.it610.com/article/max->data; max->data = https://www.it610.com/article/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"); }

功能九——打印学生信息
//打印学生信息 void dayingxueshengxinxi(LinkList& L) { if (L->data.score == 0) { printf("该系统暂时没有学生信息\n"); } else { LNode* q = new LNode; q = L; printf("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\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); }

【数据结构|数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)】相关资源及源代码:(1条消息) 数据结构课程设计c语言学生管理系统(简单详细版)-C/C++文档类资源-CSDN文库

    推荐阅读