写在前面:欢迎来到「湫歌」的博客。我是秋秋,一名普通的在校大学生。在学习之余,用博客来记录我学习过程中的点点滴滴,也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获!希望大家多多关照,我们一起成长一起进步。也希望大家多多支持我鸭,喜欢我就给我一个关注吧!
课程题目:学生成绩查询与分析系统
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文库
推荐阅读
- OpenCV|OpenCV在图像上画正弦曲线(c++)
- 数据结构|二叉排序/搜索树类模板
- c#|c# opencv 轮廓检测_OPENCV图像轮廓检测
- #|Python——数据结构——树——二叉树——二叉排序树
- 数据结构与算法|单链表详解(C语言版)
- 数据结构|数据结构 链表 合并两个有序的单链表 C语言版
- 数据结构(C语言实现)|数据结构和算法复杂度简述
- 笔记|C语言版单链表的建立方式
- 数据结构(C语言实现)|顺序表C语言版