欢迎光临散文网 会员登陆 & 注册

C/C++实现学生成绩管理系统

2023-07-06 22:36 作者:猜你会默念  | 我要投稿

学校c++课设任务 有录入打印查找删除排序功能,发出来希望对你有帮助,多多三连支持,不喜勿喷谢谢

#include #include #include #include typedef struct _Student//定义一个学生 { char name[20];//姓名 int num;//学号 int chinese;//成绩1 int math; //成绩2 int english; //成绩3 float average;//平均分 int score;//总分 }Student; typedef struct _Node//定义一个节点 { Student student; struct _Node* next; }Node; void menu(); void inputStudent(Node* head); void printStudent(Node* head); void findStudent(Node* head); void saveStudent(Node* head); void countstudent(Node* head); void loadStudent(Node* head); void deleteStudent(Node* head); void sortStudent(Node* head); //以上是头文件内容,头文件名student或者将下一行删除 #include"student.h" #pragma warning(disable:4996) int main()  { Node* head = (Node*)malloc(sizeof(Node));//创建头结点 head->next = NULL; loadStudent(head);    //读取文件学生信息 while (1)  { menu(); char c = getch(); switch (c) { case '1': //录入学生信息 inputStudent(head); break; case '2': //打印学生信息 deleteStudent(head); break; case '3':  printStudent(head); break; case '4': //查找学生信息 findStudent(head); break; case '5': //计算所有学生总分和均分 countstudent(head); break; case '6': //按成绩排序 sortStudent(head); break; case '7': //退出系统 system("cls"); printf("Bye Bye!\n"); exit(0); break; default: printf("数字错误请重新输入\n"); system("pause");//暂停程序 system("cls");//清空控制台 break; } } return 0; } void menu() //菜单函数 { system("title 学生成绩管理系统"); printf("*********************************\n"); printf("*\t学生成绩管理系统\t*\n"); printf("*********************************\n"); printf("*\t请选择功能列表\t\t*\n"); printf("*********************************\n"); printf("*\t1.录入学生信息\t\t*\n"); printf("*\t2.删除学生信息\t\t*\n"); printf("*\t3.打印学生信息\t\t*\n"); printf("*\t4.查找学生信息\t\t*\n"); printf("*\t5.计算所有学生总分和均分*\n"); printf("*\t6.按成绩排序\t\t*\n"); printf("*\t7.退出系统\t\t*\n"); printf("*********************************\n"); }//无问题 void inputStudent(Node* head)//录入学生信息 { Node* fresh = (Node*)malloc(sizeof(Node));//创建头结点 fresh->next = NULL;  printf("请输入学生姓名\n"); scanf_s("%s", fresh->student.name,20); printf("请输入学生学号\n"); scanf_s("%d", &fresh->student.num); printf("请输入学生语文成绩\n"); //name前没有&符是因为数组代表地址所以不用&符  scanf_s("%d", &fresh->student.chinese); printf("请输入学生数学成绩\n"); scanf_s("%d", &fresh->student.math); printf("请输入学生英语成绩\n"); scanf_s("%d", &fresh->student.english); printf("学生成绩录入完成\n"); Node* move = head;//尾插法 while (move->next != NULL) //当move当前指向的节点的下一个节点不为空时,move指向下一个节点 { move = move->next; } move->next = fresh;//当move当前指向的节点的下一个节点为空时,将学生节点插入到尾部 saveStudent(head);  system("pause");//暂停程序 system("cls");//清空控制台 }//无问题 void printStudent(Node* head)//输出学生信息 { Node* move = head->next; while (move != NULL) { printf("姓名%s学号%d成绩1:%d成绩2:%d成绩3:%d\n", move->student.name, move->student.num, move->student.chinese, move->student.math, move->student.english); move = move->next; } system("pause");//暂停程序 system("cls");//清空控制台 }//无问题 void findStudent(Node* head) //查找学生信息 { printf("请输入要查找的学生的学号:\n "); int num; scanf_s("%d", &num); Node* move = head->next;//从首元节点开始 while (move != NULL)  { if (num == move->student.num) { printf("姓名%s,学号%d,成绩1:%d,成绩2:%d,成绩3:%d\n", move->student.name, move->student.num, move->student.chinese, move->student.math, move->student.english); system("pause");//暂停 system("cls");//清屏 return; } move = move->next; } printf("未找到学生信息\n"); system("pause");//暂停 system("cls");//清屏 } void saveStudent(Node* head) //保存学生信息 { FILE* file = fopen("./stu.info", "w");//(在当前文件夹打开stu.info,写入)发回一个文件指针 Node* move = head->next; while (move != NULL) { if (fwrite(&move->student, sizeof(Student), 1, file) != 1) //(写哪个结构体,大小,写入次数,判断) { printf("写入失败\n"); return; } move = move->next; } fclose(file);//关闭文件 } void loadStudent(Node* head) //读取文件 { FILE* file = fopen("./stu.info", "r");//(在当前文件夹找stu.info,读取) if (!file)//没有生成文件指针 { printf("没有学生文件,跳过读取\n"); return; } Node* fresh = (Node*)malloc(sizeof(Node)); fresh->next = NULL; Node* move = head; while (fread(&fresh->student, sizeof(Student), 1, file) == 1)//(读取的结构体,读取大小,读取次数,读取成功) { move->next = fresh; move = fresh; fresh = (Node*)malloc(sizeof(Student)); fresh->next = NULL; } free(fresh); fclose(file);//关闭文件 printf("读取成功\n"); }//无问题 void deleteStudent(Node* head) //删除学生信息 { printf("请输入要删除的学生学号 :"); int num; scanf_s("%d", &num); Node* move = head;  while (move->next != NULL)//遍历链表找 { if (move->next ->student.num == num)//找到相同学号 { Node* tmp = move->next;//该指针为释放空间以目的定义 move->next = move->next->next;//跳过move->next free(tmp);//释放tmp/move->nect指向节点所占空间 tmp = NULL;//tmp指向为空,防止后期成为野指针 saveStudent(head);//保存 printf("删除成功\n"); system("pause");//暂停 system("cls");//清屏 return; } move = move->next; } printf("未找到学生信息\n"); system("pause");//暂停 system("cls");//清屏 }//无问题 void countstudent(Node* head)//各学生成绩总分和平均值 { Node* move = head->next; while(move != NULL)//遍历链表求各学生成绩平均值,成绩平均值可以反映总评好坏 { move->student.average = float((move->student.chinese + move->student.math + move->student.english) / 3); move->student.score = move->student.chinese + move->student.math + move->student.english; printf("姓名%s,平均分%f,总分%d\n",move->student.name, move->student.average,move->student.score); move = move->next; } system("pause");//暂停 system("cls");//清屏 }//无问题 void sortStudent(Node* head)//排序 { Node* sort = head->next; while (sort != NULL)//遍历链表求各学生成绩平均值,成绩平均值可以反映总评好坏 { sort->student.average = float((sort->student.chinese + sort->student.math + sort->student.english) / 3); sort->student.score = sort->student.chinese + sort->student.math + sort->student.english; sort = sort->next; } Node* move = NULL; for (Node* turn = head->next; turn->next != NULL; turn = turn->next)//双循环冒泡排序,turn控制比较轮数 { for (Node*move = head->next; move->next != NULL; move = move->next) //move控制比较次数 { if (move->student.score > move->next->student.score) { Student temp = move->student; move->student = move->next->student;//交换节点里的学生数据 move->next->student = temp; } } } printf("总分从低到高\n"); printStudent(head); }//无问题

C/C++实现学生成绩管理系统的评论 (共 条)

分享到微博请遵守国家法律