话不多说先上源码,一会有哪些bug我再给你们一一叙述

#include <stdio.h>
#include<conio.h>
#include<stdlib.h>
#include <string.h>
#include <math.h>//课程信息
typedef struct _Course
{int num;//课程编号char name[20]; //课程名称int item[1000]; //完成相应试题获得的分值
}Course;
//链表
typedef struct _Nodes
{Course cor;struct _Nodes* pNexts;
}Nodes;
Nodes* g_pHeads = NULL; //初始化头节点//学生信息
typedef struct _Student
{char name[20];// 姓名int age; //年龄int stuNum;//学号double score=0;//成绩}Student;
//链表(车厢)typedef struct _Node
{Student stu;   //学生struct _Node* pNext;//指向下一个节点的指针}Node;
//头结点
Node* g_pHead = NULL; //头结点void Welcome();
void InputStudent(); //录入学生信息
void PrintStudent(); //打印学生信息
void SaveStudent();  //保存学生信息
void ReadStudent();  //读取学生信息
int CountStudent(); //统计所有学生人数
Node* FindStudent(); //查找学生
void ModifyStudent(); //修改学生信息
void DeleteStudent(); //删除学生信息
void InputCourse(); //新增课程新增试题
void UpdataScore(); //更新学生积分
void Order(); //排序学生积分
void DeleteTest(); //删除试题//主函数
int main() {while (1) {Welcome();char ch = getch();//可以暂停一下循环,从键盘输入一个数字switch (ch) {case '1':InputStudent(); break;//输入1录入学生信息case '2':PrintStudent(); break;//输入2打印学生信息case '3':SaveStudent(); break;//输入3保存学生信息case '4':ReadStudent(); break;//输入4读取学生信息case '5':printf("学生总人数为:%d\n", CountStudent()); system("pause"); system("cls"); break;//输入5统计学生总人数case '6'://输入6查找学生信息{system("pause");//画面停留//清屏system("cls");Node* p = FindStudent();if (p != NULL)printf("学号: %d\t姓名: %s\t年龄: %d\t成绩: %.0f\n", p->stu.stuNum, p->stu.name, p->stu.age,p->stu.score );elseprintf("没有找到该学生\n");; system("pause");system("cls");break;}case '7':ModifyStudent(); break;//修改学生信息case '8':DeleteStudent(); break;//删除学生信息case '0':printf("谢谢使用!!\n"); return 0; //退出管理系统case 'a':InputCourse(); break;//新增课程新增试题case 'c':UpdataScore(); break;//更新学生积分case 'd':Order(); break; //排序学生积分case 'e':DeleteTest(); break; //删除试题default:printf("非法数据\n"); system("pause"); system("cls"); break;}}return 0;
}
//封面
void Welcome()
{printf("-----------------------------------------------------\n");printf("--     欢迎使用学生管理平台(超级无敌牛逼版vol.3)   --\n");printf("-----------------------------------------------------\n");printf("--                 请选择功能列表                  --\n");printf("-----------------------------------------------------\n");printf("--          1.录入学生信息   a.新增课程            --\n");printf("--          2.打印学生信息     新增试题            --\n");printf("--          3.保存学生信息   c.更新积分            --\n");printf("--          4.读取学生信息   d.排序功能            --\n");printf("--          5.统计学生总数   e.删除试题            --\n");printf("--                 6.查找学生信息                  --\n");printf("--                 7.修改学生信息                  --\n");printf("--                 8.删除学生信息                  --\n");printf("--                 0.退出管理系统                  --\n");printf("-----------------------------------------------------\n");
}//新增试题
void InputCourse()
{int a;//定义试题个数//创建新节点Nodes* pNewNodes = (Nodes*)malloc(sizeof(Nodes));pNewNodes->pNexts = NULL;//头插if (g_pHeads == NULL) //无头{g_pHeads = pNewNodes; //定义头}else{pNewNodes->pNexts = g_pHeads; //从pNexts里抽出数据赋给头g_pHeads = pNewNodes;}printf("请输入课程编号:\n");scanf("%d", &pNewNodes->cor.num);printf("请输入课程名称:\n");scanf("%s", pNewNodes->cor.name);printf("请输入试题个数\n");scanf("%d", &a);for (int i = 1; i <= a; i++) {printf("请输入完成第%d道试题加多少分:\n",i);scanf("%d", &pNewNodes->cor.item[i]);}//保存题目FILE* fps = fopen("C:\\Users\\ROG\\Desktop\\作业\\学生管理系统平台vol.3\\test.dat", "w");//以写文件的形式打开文件if (fps == NULL){printf("打开文件失败.\n");return;}//遍历链表Nodes* p = g_pHeads;while (p != NULL){//写文件fwrite(&p->cor, 1, sizeof(Course), fps);p = p->pNexts;}//关闭文件fclose(fps);printf("课程录入成功\n");system("pause");//画面停留//清屏system("cls");
}
//录入学生信息
void InputStudent() {char charge;   //准备打印学生信息//创建一个新节点Node* pNewNode = (Node*)malloc(sizeof(Node));pNewNode->pNext = NULL;//头插法,尾插法//头插法if (g_pHead == NULL) //没有头{g_pHead = pNewNode; //定义一个头}else{pNewNode->pNext = g_pHead;g_pHead = pNewNode;}printf("请输入学生姓名:\n");scanf("%s", pNewNode->stu.name);printf("请输入学生的年龄:\n");scanf("%d", &pNewNode->stu.age);printf("请输入学生的学号:\n");scanf("%d", &pNewNode->stu.stuNum);printf("请输入学生的成绩:\n");scanf("%lf", &pNewNode->stu.score);printf("学生信息录入成功\n");system("pause");//画面停留//清屏system("cls");
}
void PrintStudent() //打印学生信息
{system("cls");printf("-----------------------------------------------------——---------------\n");printf("--     欢迎使用学生管理平台(超级无敌牛逼版vol.3)                      --\n"); printf("------------------------------------------------------------------------\n");printf("--     -学号-     -姓名-     -年龄-     -成绩-     -等级-      -积分  --\n");printf("------------------------------------------------------------------------\n");//遍历链表Node* p = g_pHead;while (p != NULL)//只要节点不到头就一直往下打印{printf("--      -%d-      -%s-     -%d-     -%.0lf-      -%.0lf-      -%.0lf-     --\n",p->stu.stuNum,p->stu.name,p->stu.age,p->stu.score,floor(log10(p->stu.score+1)),p->stu.score);p = p->pNext;}system("pause");//画面停留//清屏system("cls");
}
//保存学生信息
void SaveStudent()
{//打开文件,利用文件指针FILE* fp = fopen("C:\\Users\\ROG\\Desktop\\作业\\学生管理系统平台vol.3\\stuinfo.dat", "w");//以写文件的形式打开文件if (fp == NULL){printf("打开文件失败.\n");return;}//遍历链表Node* p = g_pHead;while (p != NULL){//写文件fwrite(&p->stu, 1, sizeof(Student), fp);p = p->pNext;}//关闭文件fclose(fp);printf("\n数据保存成功\n");system("pause");//画面停留//清屏system("cls");
}
//读取学生和题库信息
void ReadStudent()
{//打开文件FILE* fps= fopen("C:\\Users\\ROG\\Desktop\\作业\\学生管理系统平台vol.3\\test.dat", "r"); //读取题库FILE* fp = fopen("C:\\Users\\ROG\\Desktop\\作业\\学生管理系统平台vol.3\\stuinfo.dat", "r"); //读取学生if (fp == NULL||fps==NULL){printf("打开文件失败\n");return;}//读文件Course cor;Student stu;while (fread(&stu, 1, sizeof(Student), fp))   //如果读到的文件不是末尾继续读{//创建一个新节点Node* pNewNode = (Node*)malloc(sizeof(Node));pNewNode->pNext = NULL;memcpy(pNewNode, &stu, sizeof(Student));//头插法if (g_pHead == NULL) //没有头{g_pHead = pNewNode; //定义一个头}else{pNewNode->pNext = g_pHead;g_pHead = pNewNode;}}while (fread(&cor, 1, sizeof(Course), fps))  //如果读到的文件不是末尾继续读{//创建一个新节点Nodes* pNewNodes = (Nodes*)malloc(sizeof(Nodes));pNewNodes->pNexts = NULL;memcpy(pNewNodes, &cor, sizeof(Course));//头插法if (g_pHeads == NULL) //没有头{g_pHeads = pNewNodes; //定义一个头}else{pNewNodes->pNexts = g_pHeads;g_pHeads = pNewNodes;}}//关闭文件fclose(fp);fclose(fps);printf("加载数据成功.\n");system("pause");//画面停留//清屏system("cls");
}
//统计学生人数
int CountStudent()
{int nCount = 0;//学生总数//遍历链表Node* p = g_pHead;while (p != NULL){nCount++;p = p->pNext;}return nCount;
}
//查找学生
Node* FindStudent() {int nStuNum;char szName[20];printf("请输入要查找的学生的学号:\n");scanf("%d", &nStuNum);printf("请输入要查找的学生的姓名:\n");scanf("%s", szName);Node* p = g_pHead;while (p != NULL){//strcmp字符串比较函数if (p->stu.stuNum == nStuNum || 0 == strcmp(p->stu.name, szName))return p;p = p->pNext;}//没有找到return NULL;
}
//排序学生积分
void Order()
{struct _Student temp;Node* p = g_pHead; //遍历链表while (p != NULL){while (p->pNext != NULL){if (p->stu.score > p->pNext->stu.score){temp=p->stu;p->stu = p->pNext->stu;p->pNext->stu = temp;}}p = p->pNext;}printf("排序成功\n");system("pause");//画面停留//清屏system("cls");return;
}
//更新学生积分
void UpdataScore()
{int StuNum;int num;printf("请输入需要更新的学生的学号:\n");//先查到该学生scanf("%d", &StuNum);//遍历链表Node* p = g_pHead;Nodes* ps = g_pHeads;while (p != NULL){if (p->stu.stuNum == StuNum){while (ps != NULL) {printf("请输入该学生做对了多少到%s题:\n", ps->cor.name);scanf("%d", &num);for (int i = 1; i <= num; i++){p->stu.score += ps->cor.item[i];}ps = ps->pNexts;}printf("修改成功\n");break;}p = p->pNext;}if (p == NULL){printf("没有找到该学生的信息\n");}system("pause"); //画面停留system("cls");   //清屏
}
//修改学生信息
void ModifyStudent()
{int nStuNum;printf("请输入需要修改学生信息的学号:\n");scanf("%d", &nStuNum);Node* p = g_pHead;while (p != NULL){if (p->stu.stuNum == nStuNum){printf("请输入要修改的学生的姓名 年龄 成绩:\n");scanf("%s %d %lf", p->stu.name, &p->stu.age, &p->stu.score);printf("修改成功\n");break;}p = p->pNext;}if (p == NULL){printf("没有找到该学生的信息\n");}system("pause"); //画面停留system("cls");   //清屏
}
//删除试题
void DeleteTest()
{int nTestNum;printf("请输入要删除的试题的课程编号:\n");scanf("%d", &nTestNum);Nodes* p1;//判断是否为头节点if (g_pHeads->cor.num == nTestNum) //如果对应的节点等于要删除的课程编号{p1 = g_pHeads; //备份g_pHeads = g_pHeads -> pNexts;free(p1); //释放return;}//不是头节点Nodes* p = g_pHeads;Nodes* p2; //备份while(p->pNexts!=NULL){if (p->pNexts->cor.num == nTestNum){p2 = p->pNexts; //备份p->pNexts = p->pNexts->pNexts;free(p2);printf("删除成功\n");system("pause");//画面停留//清屏system("cls");return;}p = p->pNexts;if (p->pNexts == NULL){break;}}if (p->pNexts == NULL){printf("未找到该题目\n");}system("pause");//画面停留//清屏system("cls");
}
//删除学生信息
void DeleteStudent()
{int nStuNum;printf("请输入要删除学生的学号:\n");scanf("%d", &nStuNum);Node* p1;//判断是不是头节点if (g_pHead->stu.stuNum == nStuNum) //如果头节点等于删除学生的学号{p1 = g_pHead; //备份一下头g_pHead = g_pHead->pNext;free(p1); //释放内存即可删除学生信息return;}//不是头节点Node* p = g_pHead;Node* p2; //备份的while (p->pNext != NULL){if (p->pNext->stu.stuNum == nStuNum){p2 = p->pNext;p->pNext = p->pNext->pNext;free(p2); //释放内存system("pause");//画面停留//清屏system("cls");return;}p = p->pNext;if (p->pNext == NULL) //如果节点到了尾部跳出{break;}}if (p->pNext == NULL) //如果从到到尾都没有找到{printf("没有找到该学生\n");}system("pause");//画面停留//清屏system("cls");
}

经过我的一下午测试,我发现了一个bug,就是第d.个功能,这个排序的,我目前的水平还不能写出来链表排序,但是我把代码放上去,如果想要追求完美的朋友们,可以试着修复一下我这个bug,首先是bug源码

//学生信息
typedef struct _Student
{char name[20];// 姓名int age; //年龄int stuNum;//学号double score=0;//成绩}Student;
//链表(车厢)typedef struct _Node
{Student stu;   //学生struct _Node* pNext;//指向下一个节点的指针}Node;
//头结点
Node* g_pHead = NULL; //头结点//排序学生积分
void Order()
{struct _Student temp;Node* p = g_pHead; //遍历链表while (p != NULL){while (p->pNext != NULL){if (p->stu.score > p->pNext->stu.score){temp=p->stu;p->stu = p->pNext->stu;p->pNext->stu = temp;}}p = p->pNext;}printf("排序成功\n");system("pause");//画面停留//清屏system("cls");return;
}

先说一下运行这个bug之后,只能将 123 排序成 321 ,如果一乱就陷入死循环了,其实只要按一下那个d键就会出现死循环,所以这个功能还得小心点使用,如果为了美观那就把这个功能删掉吧,这个排序我是实在做不出来了,但是我还是希望能有知识渊博的人来指导一下我,之后我会放上测试过程与图片

//

首先测试第一个内容

 第二个内容

 第三个和第四个内容就是保存到一个文件里然后再使用的系统的时候记得先读取才能显示你之前录取的学生,这里不再展示

第五个内容

 第六个内容

 第七个内容

点击确认后再次打印学生信息就变成了王小明

 第八个内容

回车之后再次打印就删除了 
第九个内容

这里强调一下,新增试题的时候记得把课程名称设置成**简单,**普通,这样以便于后面的删除课题,不然你这么一删,直接把一个课程的所有试题都给删了,目前我的水平还做不到单独删除一道题,所以只能委屈一下大家了,例如我新增语文题,肯定得分难易度吧,课程编号1为 语文简单,给3个题,一题2分,然后课程编号2为 语文普通,给3个题,一题两分,这样才能说的过去。

 第十个内容

之后再打印的话就会改变成绩和积分还有等级

第十一个内容有bug,有bug,有bug,这里无法展示,运行了会陷入死循环

第十二个内容

删除之后再次选择更新积分就没有这一试题了 。


好了,说完了,欢迎大家参考学习,欢迎大家修复我的那个排序函数的bug,如果能完善这个程序,那就@我一下,或者给我发私信,我随时在线,毕竟追求完美嘛~~

2022级郑州轻工业大学学生平台管理系统期末设计(最终版v3.0)相关推荐

  1. 学生信息管理系统(面向对象版本)V3.0

    版本 面向对象版本的学生信息管理系统 第一版: import os# 面向对象的方式分析学生管理管理系统# 1. 添加学生的功能 # 2. 修改学生的功能 # 3. 删除学生的功能 # 4. 查询学生 ...

  2. PTA 7-46 请输出郑州轻工业大学OJ平台网址

    PTA 7-46 请输出郑州轻工业大学OJ平台网址 分数 5 作者 iwyou 单位 郑州轻工业大学 请输出郑州轻工业大学的OJ平台网址, 你可能不知道网址是什么,不要着急,慢慢往下看. 输入格式: ...

  3. 7-46 请输出郑州轻工业大学OJ平台网址

    7-46 请输出郑州轻工业大学OJ平台网址 请输出郑州轻工业大学的OJ平台网址, 你可能不知道网址是什么,不要着急,慢慢往下看. 输入格式: 本题没有输入. 输出格式: 输出一行字符串为郑州轻工业大学 ...

  4. 郑州轻工业大学OJ平台题解

    前言 本题解是由c/c ++ 和python构成 郑州轻工业大学oj平台点击进入 题解链接 Python ZZULIOJ1001-1005Python解法 ZZULIOJ1106-1010Python ...

  5. 期末课设—学生成绩管理系统的设计与实现—大作业

    课程 面向对象课程设计 题目 学生成绩管理系统的设计与实现 主要内容.基本要求.主要参考资料等 一.主要内容 本次课程设计主要完成学生宿舍管理系统的设计与开发.对学生宿舍管理系统的需求进行任务分解,完 ...

  6. 西电数据库实验-学生学籍管理系统 数据库设计

    西电数据库实验-学生学籍管理系统 数据库设计 文章目录 西电数据库实验-学生学籍管理系统 数据库设计 需求分析 实体集 联系集 概念结构设计 逻辑结构设计 实体集 department(id‾,nam ...

  7. 数据库课程设计-----------学生选课管理系统的设计

    由于时间关系,里面许多图片都已经变形或错位 课程设计(学年论文) 题目:学生选课管理系统的设计与实现 系    院计算机科学技术系 专    业计算机科学与技术 班    级 姓    名 学    ...

  8. 学生宿舍管理系统的设计与实现(课程论文)

    学生宿舍管理系统的设计与实现 摘  要:现如今高校大学生越来越多,寝室压力巨大,学生不好管理.学生宿舍管理系统对于一个学校来说是必不可少的组成部分.目前好多学校还停留在宿舍管理人员手工记录数据的最初阶 ...

  9. ssm学生成绩管理系统的设计与实现毕业设计源码070942

    摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设学生成绩 ...

最新文章

  1. 高德API+Python解决租房问题
  2. PTA基础编程题目集-7-32 说反话-加强版
  3. 计算机科学概论各章总结,计算机科学概论(原书第5版)读书笔记
  4. Winform中实现读取xml配置文件并动态配置DevExpress的RadioGroup的选项
  5. 花体英文字帖pdf可打印_考研政治 | 马原24个主观题答题原理!PDF可打印!
  6. anaconda使用python写游戏,python娱乐时间:Anaconda方式搭建python开发环境
  7. 使用NoSQL实施实体服务–第5部分:使用云提高自治性
  8. 51信用卡微服务集成测试自动化探索
  9. 关于单点登录的实现方法
  10. RTI_DDS自定义插件开发 5 专属区域(_xxEA)
  11. 通过 SiteServer CMS 推进政府网站集约化、集群化建设
  12. HTML中如何将背景图片移动,怎么设置html的背景图片的位置
  13. 微信公众服务号申请流程
  14. 世界上著名的三大检索工具
  15. 鸿蒙太空是什么意思,“我所居兮,青埂之峰;我所游兮,鸿蒙太空。谁与我逝兮,吾谁与从?渺渺茫茫兮,归彼大荒”的意思...
  16. 齐博免费 mysql_pconnect_齐博CMS:免费PHP+mysql 100M空间
  17. python3 爬取半次元cosplay图片
  18. putty登录树莓派4超时
  19. FOFA网络空间搜索引擎使用教程
  20. 用opencv画一个笑脸的图像

热门文章

  1. Unity中简单粗暴的消息机制(可限制消息调用次数)
  2. 使用SQLServer2008备份bak文件还原数据库
  3. cocos2d-iphone之魔塔20层第六部分
  4. 计算机维护基础知识ppt,日常维护和计算机基础知识.ppt
  5. 《Goodbye Lullaby》艾薇儿的新专辑好似一丝清风
  6. GRE核心词汇助记与精练-List7 坐、站、躺
  7. java订单编号工具类_[idmiss-common] Java 工具类之- 顺序订单号的生成
  8. 唯一获奖容器厂商!灵雀云斩获2022信创“大比武”通信赛道大奖
  9. Win7 自动备份与恢复及Windows AIK
  10. Spring——配置数据源和数据库连接池