文章目录
- 学生信息管理系统
- 一、项目思路
- 1、模块化思想
- 2、流程图
- 二、功能框架
- 1、系统菜单
- 2、其他功能
- 三、分布实现
- 0.学生属性/系统属性
- (1)学生属性
- (2)系统属性
- 1.创建系统
- 2.绘制菜单
- 3.按键操作
- 4.录入信息
- 5.浏览信息
- 6.查找信息
- 7.修改信息
- 8.删除信息
- 9.排序显示
- 10.平均分数
- 11.最高低分数
- 12.文件读写
- 13.登入验证
- 四、完整代码
学生信息管理系统
知识点如下:
- 数组遍历
- 结构体、结构体指针、结构体数组
- 函数调用
- 文件处理
功能如下:
- 登入验证
- 文件存储信息
- 录入/浏览学生信息
- 查找(按学号、姓名)/修改/删除学生信息
- 排序(按单科、三科成绩)/求平均分数/求最高低分学生信息
视频展示:
视频展示链接
一、项目思路
在做一个项目时,需要知道如何去做?怎样按步骤?第一步该做什么,第二步该做什么?
1、模块化思想
- 学生系统:学生需要写哪些属性(学号、姓名、成绩等);学生的数量
- 将学生系统的中的每个功能作为一个模块,通过一个函数来实现
2、流程图
二、功能框架
1、系统菜单
//2.绘制菜单 void menu() { printf("*---------------【管理系统】-------------*n"); printf("tt0.退出功能n"); printf("tt1.录入信息n"); printf("tt2.浏览信息n"); printf("tt3.查找信息n"); printf("tt4.修改信息n"); printf("tt5.删除信息n"); printf("tt6.排序显示n"); printf("tt7.平均分数n"); printf("tt8.最高低分n"); printf("*---------------------------------------*n"); printf("请输入要实现的功能(0-8):n"); }
运行效果:
2、其他功能
利用模块化思想将每个模块用一个函数来实现
//1.创建系统 pSys createSystem() { } //2.绘制菜单 void menu() { } //4.录入信息 void insertData(pSys psystem) { } //5.浏览信息 void printData(pSys psystem) { } //6.查找信息 void searchMenu() { } void searchByStudentNumber(pSys psystem) { } void searchByName(pSys psystem) { } void searchData(pSys psystem) { } //7.修改信息 void modifyData(pSys psystem) { } //8.删除信息 void deleteData(pSys psystem) { } //9.排序显示 void sortMenu() { } void sortByEnglish(pSys psystem) { } void sortByTotal(pSys psystem) { } void sortData(pSys psystem) { } //10.平均分数 void calAverage(pSys psystem) { } //11.最高低分数 void highLow(pSys psystem) { } //12.文件读写 void readFile(pSys psystem, const char* fileName) { } //13.登入验证 void login() { } //3.按键操作 void keyDown(pSys psystem) { } int main() { while (1) { } return 0; }
三、分布实现
0.学生属性/系统属性
(1)学生属性
因学生具有多种属性,则具有多种数据类型(字符型、整型、浮点型等);利用结构体存储学生信息;
//学生信息 typedef struct Student { char number[20]; //学号 char name[20]; //姓名 int english; //英语成绩 int math; //数学成绩 int chinese; //语文成绩 double score; //总分 }Stu, * pStu;
(2)系统属性
系统属性包括学生信息、学生数量;
//系统信息 typedef struct System { Stu stuInfo[100]; int curSize; //当前学生数量 }Sys, * pSys;
1.创建系统
//1.创建系统 pSys createSystem() { pSys psystem = (pSys)malloc(sizeof(Sys)); //申请内存 assert(psystem); //断言处理:判断内存是否申请成功 psystem->curSize = 0; return psystem; }
2.绘制菜单
//2.绘制菜单 void menu() { printf("*---------------【管理系统】-------------*n"); printf("tt0.退出功能n"); printf("tt1.录入信息n"); printf("tt2.浏览信息n"); printf("tt3.查找信息n"); printf("tt4.修改信息n"); printf("tt5.删除信息n"); printf("tt6.排序显示n"); printf("tt7.平均分数n"); printf("tt8.最高低分n"); printf("*---------------------------------------*n"); printf("请输入要实现的功能(0-8):n"); }
3.按键操作
通过按键输入指令,再利用switch判断指令并调用相关函数;
//3.按键操作 void keyDown(pSys psystem) { int userkey = 0; scanf_s("%d", &userkey); switch (userkey) { case 0: printf("----退出----n"); exit(0); break; case 1: printf("----录入----n"); insertData(psystem); writeFile(psystem, "studentInfo.txt"); break; case 2: printf("----浏览----n"); printData(psystem); break; case 3: printf("----查找----n"); searchData(psystem); break; case 4: printf("----修改----n"); modifyData(psystem); writeFile(psystem, "studentInfo.txt"); break; case 5: printf("----删除----n"); deleteData(psystem); writeFile(psystem, "studentInfo.txt"); break; case 6: printf("----排序----n"); sortData(psystem); break; case 7: printf("----平均分数----n"); calAverage(psystem); break; case 8: printf("----最高低分----n"); highLow(psystem); break; default: printf("----Error----n"); break; } }
4.录入信息
//4.录入信息 void insertData(pSys psystem) { int userkey = 0; while (1) { printf("请输入学生信息(Student_number,Name,English,Math,Chinese):n"); scanf_s("%s%s%d%d%d", psystem->stuInfo[psystem->curSize].number, 20, psystem->stuInfo[psystem->curSize].name, 20, &psystem->stuInfo[psystem->curSize].english, &psystem->stuInfo[psystem->curSize].math, &psystem->stuInfo[psystem->curSize].chinese); psystem->curSize++; printf("是否继续录入信息?(y/n):"); while (getchar() != 'n'); userkey = getchar(); if (userkey == 'N' || userkey == 'n') { break; } while (getchar() != 'n'); printf("录入信息成功n"); } }
5.浏览信息
通过数组遍历方式,打印学生信息;
//5.浏览信息 void printData(pSys psystem) { printf("学号tt姓名t英语t数学t语文n"); for (int i = 0; i < psystem->curSize; i++) { printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } }
6.查找信息
绘制一个查找菜单,通过两种方式查找;一种是根据学号查找,另一种是根据姓名查找;
//6.查找信息 //查找菜单 void searchMenu() { printf("--------【查找菜单】--------n"); printf("t1.按学号查找n"); printf("t2.按姓名查找n"); printf("---------------------------n"); printf("请输入查找方式(1-2):"); } //1.通过学号查找 void searchByStudentNumber(pSys psystem) { int flag = 0; char student_number[20] = { "" }; printf("请输入查找的学号:n"); scanf_s("%s", student_number, 20); printf("学号tt姓名t英语t数学t语文n"); for (int i = 0; i < psystem->curSize; i++) { if (strcmp(student_number, psystem->stuInfo[i].number) == 0) { flag = 1; printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } } if (flag == 0) { printf("查找失败n"); } else printf("查找成功n"); } //2.通过姓名查找 void searchByName(pSys psystem) { int flag = 0; char name[20] = { "" }; printf("请输入查找的姓名:n"); scanf_s("%s", name, 20); printf("学号tt姓名t英语t数学t语文n"); for (int i = 0; i < psystem->curSize; i++) { if (strcmp(name, psystem->stuInfo[i].name) == 0) { flag = 1; printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } } if (flag == 0) { printf("查找失败n"); } else printf("查找成功n"); } //键盘输入指令;选择 void searchData(pSys psystem) { int userkey = 0; while (1) { searchMenu(); scanf_s("%d", &userkey); switch (userkey) { case 1: searchByStudentNumber(psystem); break; case 2: searchByName(psystem); break; default: printf("----Error----n"); break; } printf("是否继续查找?(y/n):"); while (getchar() != 'n'); //清除缓冲区 userkey = getchar(); if (userkey == 'N' || userkey == 'n') { break; } system("cls"); } }
7.修改信息
首先通过学号找到该同学的数组坐标,然后进行修改信息;
//7.修改信息 void modifyData(pSys psystem) { int pos = -1; //第一个数据可能是数组下标0,所以要从-1开始 int i = 0; char student_number[20] = { "" }; printf("请输入修改的学号:"); scanf_s("%s", student_number, 20); for (i = 0; i < psystem->curSize; i++) { if (strcmp(student_number, psystem->stuInfo[i].number) == 0) { pos = i; break; } } if (pos == -1) { printf("未找到修改的信息n"); } else { printf("请输入学生信息(Student_number,Name,English,Math,Chinese):n"); scanf_s("%s%s%d%d%d", psystem->stuInfo[pos].number, 20, psystem->stuInfo[pos].name, 20, &psystem->stuInfo[pos].english, &psystem->stuInfo[pos].math, &psystem->stuInfo[pos].chinese); printf("修改成功n"); } }
8.删除信息
//8.删除信息 void deleteData(pSys psystem) { int pos = -1; int i = 0, j = 0; char student_number[20] = { "" }; printf("请输入删除的学号:"); scanf_s("%s", student_number, 20); for (i = 0; i < psystem->curSize; i++) { if (strcmp(student_number, psystem->stuInfo[i].number) == 0) { pos = i; break; } } if (pos == -1) { printf("未找到删除的信息n"); } else { for (int j = i; j < psystem->curSize - 1; j++) { psystem->stuInfo[j] = psystem->stuInfo[j + 1]; } psystem->curSize--; printf("删除成功n"); } }
9.排序显示
绘制一个排序菜单,通过两种方式排序;一种是根据单科成绩(本项目是英语成绩;可自行修改),另一种是三科总分;
//9.排序显示 void sortMenu() { printf("--------【排序菜单】------n"); printf("t1.按英语成绩n"); printf("t2.按三科总分n"); printf("-------------------------n"); printf("请输入(1-2):"); } void sortByEnglish(pSys psystem) { for (int i = 0; i < psystem->curSize; i++) { for (int j = 0; j < psystem->curSize - 1 - i; j++) { if (psystem->stuInfo[j].english > psystem->stuInfo[j + 1].english) { Stu temp = psystem->stuInfo[j]; psystem->stuInfo[j] = psystem->stuInfo[j + 1]; psystem->stuInfo[j + 1] = temp; } } } printf("学号tt姓名t英语t数学t语文n"); for (int i = psystem->curSize - 1; i >= 0; i--) { printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } } void sortByTotal(pSys psystem) { double total = 0; for (int i = 0; i < psystem->curSize; i++) { total = psystem->stuInfo[i].english + psystem->stuInfo[i].math + psystem->stuInfo[i].chinese; psystem->stuInfo[i].score = total; } for (int i = 0; i < psystem->curSize; i++) { for (int j = 0; j < psystem->curSize - 1 - i; j++) { if (psystem->stuInfo[j].score > psystem->stuInfo[j + 1].score) { Stu temp = psystem->stuInfo[j]; psystem->stuInfo[j] = psystem->stuInfo[j + 1]; psystem->stuInfo[j + 1] = temp; } } } printf("学号tt姓名t英语t数学t语文n"); for (int i = psystem->curSize - 1; i >= 0; i--) { printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } } void sortData(pSys psystem) { int userkey = 0; while (1) { sortMenu(); scanf_s("%d", &userkey); switch (userkey) { case 1: sortByEnglish(psystem); break; case 2: sortByTotal(psystem); break; default: printf("----Error---n"); break; } printf("是否继续排序?(y/n):"); while (getchar() != 'n'); userkey = getchar(); if (userkey == 'N' || userkey == 'n') break; system("cls"); } }
10.平均分数
本项目的平均分数是求每科的平均分数;可以自己写总分的平均分数;
//10.平均分数 void calAverage(pSys psystem) { int sum1 = 0, sum2 = 0, sum3 = 0; double average1 = 0, average2 = 0, average3 = 0; for (int i = 0; i < psystem->curSize; i++) { sum1 += psystem->stuInfo[i].english; sum2 += psystem->stuInfo[i].math; sum3 += psystem->stuInfo[i].chinese; } average1 = sum1 / psystem->curSize; average2 = sum2 / psystem->curSize; average3 = sum3 / psystem->curSize; printf("学号tt姓名t英语t数学t语文n"); for (int i = 0; i < psystem->curSize; i++) { printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } printf("n"); printf("平均分数tt英语t数学t语文n"); printf("平均分数t %.2ft%.2ft%.2fn", average1, average2, average3); }
11.最高低分数
先求出每个学生的三科总分,然后通过冒泡排序方式进行排序,最后得出最高分与最低分的数组坐标并打印出来;
//11.最高低分数 void highLow(pSys psystem) { double total = 0; for (int i = 0; i < psystem->curSize; i++) { total = psystem->stuInfo[i].english + psystem->stuInfo[i].math + psystem->stuInfo[i].chinese; psystem->stuInfo[i].score = total; } for (int i = 0; i < psystem->curSize; i++) { for (int j = 0; j < psystem->curSize - 1 - i; j++) { if (psystem->stuInfo[j].score > psystem->stuInfo[j + 1].score) { Stu temp = psystem->stuInfo[j]; psystem->stuInfo[j] = psystem->stuInfo[j + 1]; psystem->stuInfo[j + 1] = temp; } } } if (psystem->curSize >= 1) { printf("--------------最高分数--------------n"); printf("学号tt姓名t英语t数学t语文n"); printf("%st%st%dt%dt%dn", psystem->stuInfo[psystem->curSize - 1].number, psystem->stuInfo[psystem->curSize - 1].name, psystem->stuInfo[psystem->curSize - 1].english, psystem->stuInfo[psystem->curSize - 1].math, psystem->stuInfo[psystem->curSize - 1].chinese); printf("n"); printf("--------------最低分数--------------n"); printf("学号tt姓名t英语t数学t语文n"); printf("%st%st%dt%dt%dn", psystem->stuInfo[0].number, psystem->stuInfo[0].name, psystem->stuInfo[0].english, psystem->stuInfo[0].math, psystem->stuInfo[0].chinese); } }
12.文件读写
通过文件指针FILE* fp访问文件,如果没有学生信息文件,则创建文件;通过fopen、fclose、fscanf、fprintf函数操作文件进行打开关闭、读写;
//12.文件读写 //读学生信息 void readFile(pSys psystem, const char* fileName) { FILE* fp = fopen(fileName, "r"); if (fp == NULL) { fp = fopen(fileName, "w+"); } while (fscanf(fp, "%st%st%dt%dt%dn", psystem->stuInfo[psystem->curSize].number, psystem->stuInfo[psystem->curSize].name, &psystem->stuInfo[psystem->curSize].english, &psystem->stuInfo[psystem->curSize].math, &psystem->stuInfo[psystem->curSize].chinese) != EOF) { psystem->curSize++; } fclose(fp); } //写学生信息 void writeFile(pSys psystem, const char* fileName) { FILE* fp = fopen(fileName, "w+"); for (int i = 0; i < psystem->curSize; i++) { fprintf(fp, "%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } }
13.登入验证
登入验证通过用户名与密码一起登入验证,用户输入密码用*来保护密码;
//13.登入验证 void login() { char username[20] = { "" }; char password[20] = { "" }; printf("----登入验证----n"); printf("用户名:"); gets_s(username, 20); printf("密 码:"); int key = 0; int i = 0; while ((key = _getch()) != 'r') { if (key == 'b') { printf("b b"); i--; continue; } putchar('*'); password[i++] = key; } password[i] = ' '; printf("n"); if (!strcmp(username, "root") && !strcmp(password, "123456")) { printf("登入成功!n"); } else { printf("登入失败!n"); exit(0); } }
效果如下:
四、完整代码
#include#include #include #include //学生信息 typedef struct Student { char number[20]; //学号 char name[20]; //姓名 int english; //英语成绩 int math; //数学成绩 int chinese; //语文成绩 double score; //总分 }Stu, * pStu; //系统信息 typedef struct System { Stu stuInfo[100]; int curSize; //当前学生数量 }Sys, * pSys; //1.创建系统 pSys createSystem() { pSys psystem = (pSys)malloc(sizeof(Sys)); //申请内存 assert(psystem); //断言处理:判断内存是否申请成功 psystem->curSize = 0; return psystem; } //2.绘制菜单 void menu() { printf("*---------------【管理系统】-------------*n"); printf("tt0.退出功能n"); printf("tt1.录入信息n"); printf("tt2.浏览信息n"); printf("tt3.查找信息n"); printf("tt4.修改信息n"); printf("tt5.删除信息n"); printf("tt6.排序显示n"); printf("tt7.平均分数n"); printf("tt8.最高低分n"); printf("*---------------------------------------*n"); printf("请输入要实现的功能(0-8):n"); } //4.录入信息 void insertData(pSys psystem) { int userkey = 0; while (1) { printf("请输入学生信息(Student_number,Name,English,Math,Chinese):n"); scanf_s("%s%s%d%d%d", psystem->stuInfo[psystem->curSize].number, 20, psystem->stuInfo[psystem->curSize].name, 20, &psystem->stuInfo[psystem->curSize].english, &psystem->stuInfo[psystem->curSize].math, &psystem->stuInfo[psystem->curSize].chinese); psystem->curSize++; printf("是否继续录入信息?(y/n):"); while (getchar() != 'n'); userkey = getchar(); if (userkey == 'N' || userkey == 'n') { break; } while (getchar() != 'n'); printf("录入信息成功n"); } } //5.浏览信息 void printData(pSys psystem) { printf("学号tt姓名t英语t数学t语文n"); for (int i = 0; i < psystem->curSize; i++) { printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } } //6.查找信息 void searchMenu() { printf("--------【查找菜单】--------n"); printf("t1.按学号查找n"); printf("t2.按姓名查找n"); printf("---------------------------n"); printf("请输入查找方式(1-2):"); } void searchByStudentNumber(pSys psystem) { int flag = 0; char student_number[20] = { "" }; printf("请输入查找的学号:n"); scanf_s("%s", student_number, 20); printf("学号tt姓名t英语t数学t语文n"); for (int i = 0; i < psystem->curSize; i++) { if (strcmp(student_number, psystem->stuInfo[i].number) == 0) { flag = 1; printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } } if (flag == 0) { printf("查找失败n"); } else printf("查找成功n"); } void searchByName(pSys psystem) { int flag = 0; char name[20] = { "" }; printf("请输入查找的姓名:n"); scanf_s("%s", name, 20); printf("学号tt姓名t英语t数学t语文n"); for (int i = 0; i < psystem->curSize; i++) { if (strcmp(name, psystem->stuInfo[i].name) == 0) { flag = 1; printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } } if (flag == 0) { printf("查找失败n"); } else printf("查找成功n"); } void searchData(pSys psystem) { int userkey = 0; while (1) { searchMenu(); scanf_s("%d", &userkey); switch (userkey) { case 1: searchByStudentNumber(psystem); break; case 2: searchByName(psystem); break; default: printf("----Error----n"); break; } printf("是否继续查找?(y/n):"); while (getchar() != 'n'); //清除缓冲区 userkey = getchar(); if (userkey == 'N' || userkey == 'n') { break; } system("cls"); } } //7.修改信息 void modifyData(pSys psystem) { int pos = -1; //第一个数据可能是数组下标0,所以要从-1开始 int i = 0; char student_number[20] = { "" }; printf("请输入修改的学号:"); scanf_s("%s", student_number, 20); for (i = 0; i < psystem->curSize; i++) { if (strcmp(student_number, psystem->stuInfo[i].number) == 0) { pos = i; break; } } if (pos == -1) { printf("未找到修改的信息n"); } else { printf("请输入学生信息(Student_number,Name,English,Math,Chinese):n"); scanf_s("%s%s%d%d%d", psystem->stuInfo[pos].number, 20, psystem->stuInfo[pos].name, 20, &psystem->stuInfo[pos].english, &psystem->stuInfo[pos].math, &psystem->stuInfo[pos].chinese); printf("修改成功n"); } } //8.删除信息 void deleteData(pSys psystem) { int pos = -1; int i = 0, j = 0; char student_number[20] = { "" }; printf("请输入删除的学号:"); scanf_s("%s", student_number, 20); for (i = 0; i < psystem->curSize; i++) { if (strcmp(student_number, psystem->stuInfo[i].number) == 0) { pos = i; break; } } if (pos == -1) { printf("未找到删除的信息n"); } else { for (int j = i; j < psystem->curSize - 1; j++) { psystem->stuInfo[j] = psystem->stuInfo[j + 1]; } psystem->curSize--; printf("删除成功n"); } } //9.排序显示 void sortMenu() { printf("--------【排序菜单】------n"); printf("t1.按英语成绩n"); printf("t2.按三科总分n"); printf("-------------------------n"); printf("请输入(1-2):"); } void sortByEnglish(pSys psystem) { for (int i = 0; i < psystem->curSize; i++) { for (int j = 0; j < psystem->curSize - 1 - i; j++) { if (psystem->stuInfo[j].english > psystem->stuInfo[j + 1].english) { Stu temp = psystem->stuInfo[j]; psystem->stuInfo[j] = psystem->stuInfo[j + 1]; psystem->stuInfo[j + 1] = temp; } } } printf("学号tt姓名t英语t数学t语文n"); for (int i = psystem->curSize - 1; i >= 0; i--) { printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } } void sortByTotal(pSys psystem) { double total = 0; for (int i = 0; i < psystem->curSize; i++) { total = psystem->stuInfo[i].english + psystem->stuInfo[i].math + psystem->stuInfo[i].chinese; psystem->stuInfo[i].score = total; } for (int i = 0; i < psystem->curSize; i++) { for (int j = 0; j < psystem->curSize - 1 - i; j++) { if (psystem->stuInfo[j].score > psystem->stuInfo[j + 1].score) { Stu temp = psystem->stuInfo[j]; psystem->stuInfo[j] = psystem->stuInfo[j + 1]; psystem->stuInfo[j + 1] = temp; } } } printf("学号tt姓名t英语t数学t语文n"); for (int i = psystem->curSize - 1; i >= 0; i--) { printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } } void sortData(pSys psystem) { int userkey = 0; while (1) { sortMenu(); scanf_s("%d", &userkey); switch (userkey) { case 1: sortByEnglish(psystem); break; case 2: sortByTotal(psystem); break; default: printf("----Error---n"); break; } printf("是否继续排序?(y/n):"); while (getchar() != 'n'); userkey = getchar(); if (userkey == 'N' || userkey == 'n') break; system("cls"); } } //10.平均分数 void calAverage(pSys psystem) { int sum1 = 0, sum2 = 0, sum3 = 0; double average1 = 0, average2 = 0, average3 = 0; for (int i = 0; i < psystem->curSize; i++) { sum1 += psystem->stuInfo[i].english; sum2 += psystem->stuInfo[i].math; sum3 += psystem->stuInfo[i].chinese; } average1 = sum1 / psystem->curSize; average2 = sum2 / psystem->curSize; average3 = sum3 / psystem->curSize; printf("学号tt姓名t英语t数学t语文n"); for (int i = 0; i < psystem->curSize; i++) { printf("%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } printf("n"); printf("平均分数tt英语t数学t语文n"); printf("平均分数t %.2ft%.2ft%.2fn", average1, average2, average3); } //11.最高低分数 void highLow(pSys psystem) { double total = 0; for (int i = 0; i < psystem->curSize; i++) { total = psystem->stuInfo[i].english + psystem->stuInfo[i].math + psystem->stuInfo[i].chinese; psystem->stuInfo[i].score = total; } for (int i = 0; i < psystem->curSize; i++) { for (int j = 0; j < psystem->curSize - 1 - i; j++) { if (psystem->stuInfo[j].score > psystem->stuInfo[j + 1].score) { Stu temp = psystem->stuInfo[j]; psystem->stuInfo[j] = psystem->stuInfo[j + 1]; psystem->stuInfo[j + 1] = temp; } } } if (psystem->curSize >= 1) { printf("--------------最高分数--------------n"); printf("学号tt姓名t英语t数学t语文n"); printf("%st%st%dt%dt%dn", psystem->stuInfo[psystem->curSize - 1].number, psystem->stuInfo[psystem->curSize - 1].name, psystem->stuInfo[psystem->curSize - 1].english, psystem->stuInfo[psystem->curSize - 1].math, psystem->stuInfo[psystem->curSize - 1].chinese); printf("n"); printf("--------------最低分数--------------n"); printf("学号tt姓名t英语t数学t语文n"); printf("%st%st%dt%dt%dn", psystem->stuInfo[0].number, psystem->stuInfo[0].name, psystem->stuInfo[0].english, psystem->stuInfo[0].math, psystem->stuInfo[0].chinese); } } //12.文件读写 void readFile(pSys psystem, const char* fileName) { FILE* fp = fopen(fileName, "r"); if (fp == NULL) { fp = fopen(fileName, "w+"); } while (fscanf(fp, "%st%st%dt%dt%dn", psystem->stuInfo[psystem->curSize].number, psystem->stuInfo[psystem->curSize].name, &psystem->stuInfo[psystem->curSize].english, &psystem->stuInfo[psystem->curSize].math, &psystem->stuInfo[psystem->curSize].chinese) != EOF) { psystem->curSize++; } fclose(fp); } void writeFile(pSys psystem, const char* fileName) { FILE* fp = fopen(fileName, "w+"); for (int i = 0; i < psystem->curSize; i++) { fprintf(fp, "%st%st%dt%dt%dn", psystem->stuInfo[i].number, psystem->stuInfo[i].name, psystem->stuInfo[i].english, psystem->stuInfo[i].math, psystem->stuInfo[i].chinese); } } //13.登入验证 void login() { char username[20] = { "" }; char password[20] = { "" }; printf("----登入验证----n"); printf("用户名:"); gets_s(username, 20); printf("密 码:"); int key = 0; int i = 0; while ((key = _getch()) != 'r') { if (key == 'b') { printf("b b"); i--; continue; } putchar('*'); password[i++] = key; } password[i] = ' '; printf("n"); if (!strcmp(username, "root") && !strcmp(password, "123456")) { printf("登入成功!n"); } else { printf("登入失败!n"); exit(0); } } //3.按键操作 void keyDown(pSys psystem) { int userkey = 0; scanf_s("%d", &userkey); switch (userkey) { case 0: printf("----退出----n"); exit(0); break; case 1: printf("----录入----n"); insertData(psystem); writeFile(psystem, "studentInfo.txt"); break; case 2: printf("----浏览----n"); printData(psystem); break; case 3: printf("----查找----n"); searchData(psystem); break; case 4: printf("----修改----n"); modifyData(psystem); writeFile(psystem, "studentInfo.txt"); break; case 5: printf("----删除----n"); deleteData(psystem); writeFile(psystem, "studentInfo.txt"); break; case 6: printf("----排序----n"); sortData(psystem); break; case 7: printf("----平均分数----n"); calAverage(psystem); break; case 8: printf("----最高低分----n"); highLow(psystem); break; default: printf("----Error----n"); break; } } int main() { login(); system("cls"); //清屏 pSys psystem = createSystem(); //创建系统 readFile(psystem, "studentInfo.txt"); while (1) { menu(); keyDown(psystem); system("pause"); //按任意键继续 system("cls"); //清屏 } return 0; }
感谢阅读,如有不足之处,欢迎来指正。谢谢!