# 一、总体设计
## 1.程序的总体设计
![](https://www.writebug.com/myres/static/uploads/2021/10/26/b0883b366b418b393a959045cb04babe.writebug)
## 2.数据结构
```c++
typedef struct student {
char name[CH]; //姓名
char no[CH]; //学号
float math; //高数成绩
float English; //英语成绩
float physics; //物理成绩
float C_language; //C语言成绩
float Average; //平均分数
float S_all; //总分数
}student;
```
## 3.函数原型声明的说明(功能,参数,返回值)
```c++
void welcome(); //欢迎界面,无参数,无返回值
void meun(); //菜单界面,无参数,无返回值
void read_from_file(); //从文件中读取学生的信息,无参数,无返回值
void write_to_file(); //向文件中写入学生的信息 ,无参数,无返回值
void Add(); //添加学生信息,无参数,无返回值
void Show(); //显示学生信息,无参数,无返回值
void Change_information(); //修改学生信息,无参数,无返回值
void Change_information1(); //按学号修改,无参数,无返回值
void Delete(); //删除学生信息,无参数,无返回值
void Delete1(); //按学号删除,无参数,无返回值
void Search(); //查询学生成绩,无参数,无返回值
void Search1(); //按学号查询,无参数,无返回值
void Sort(); //成绩排序输出,无参数,无返回值
void Sort1(); //高数排序输出,无参数,无返回值
void Secede(); //退出查询,无参数,无返回值
```
## 4.流程图
![](https://www.writebug.com/myres/static/uploads/2021/10/26/ef9db27173bff1eed9c0e65f3b440e21.writebug)
# 二、详细设计
## 1.main( )(流程图)
![](https://www.writebug.com/myres/static/uploads/2021/10/26/016d56c2bd3190e03448344656dda3e0.writebug)
## 2.main()函数运行过程
- 第一步,运行read_from_file();读取文件;
- 第二步,运行welcome();进入欢迎界面;
- 第三步,运行meun();进入菜单界面进行选择(1~7);
第四步,若选1~7进入循环:
- 如果是1:运行Add();输入数据;
- 如果是2:运行Show();展示数据;
- 如果是3:运行Change_information();改变数据;
- 如果是4:运行Delete();system("pause");删除数据;
- 如果是5:运行Search();system("pause");查找数据;
- 如果是6:运行Sort();system("pause");对数据排序;
- 如果是7:运行Secede();system("pause");结束循环。
第五步,运行write_to_file();写入文件并结束程序。
# 三、测试及调试
(程序运行截图,测试方案、存在的问题及解决方法)
- (写明测试软件的时候采用的测试方法、测试数据,并说明在你软件设计、调试过程中的遇到的问题和解决方案)
## 1.运行截图:
```c++
//欢迎界面
```
![](https://www.writebug.com/myres/static/uploads/2021/10/26/8db2ed77bad5bd744a0399bf5ed0d697.writebug)
```c++
//菜单界面
```
![](https://www.writebug.com/myres/static/uploads/2021/10/26/69dc84ed6be24e837502976bd5f7f7ae.writebug)
```c++
//1录入学生数据界面
```
![](https://www.writebug.com/myres/static/uploads/2021/10/26/5a76b223b55cc592fb46cc8c9ab6cca5.writebug)
```c++
//2显示学生数据界面
```
![](https://www.writebug.com/myres/static/uploads/2021/10/26/5ac0854eaa174f08f0bf97f0d0f46cac.writebug)
```c++
//3修改学生信息界面
```
![](https://www.writebug.com/myres/static/uploads/2021/10/26/ec13fd0d7885a65ab71da31377543cf3.writebug)
```c++
//4删除学生数据界面
```
![](https://www.writebug.com/myres/static/uploads/2021/10/26/0063f1288a663f21355471d7501d1619.writebug)
```c++
//5查询成绩数据界面
```
![](https://www.writebug.com/myres/static/uploads/2021/10/26/c6ba4c77e97216cfce28faff7008a7d6.writebug)
```c++
//6降序输出数据界面
```
![](https://www.writebug.com/myres/static/uploads/2021/10/26/f380bfd9999a2cd38520c7b3cffd76dd.writebug)
```c++
//7退出管理系统界面
```
![](https://www.writebug.com/myres/static/uploads/2021/10/26/ce6ddb7b657efff1b8be486538dad2ab.writebug)
## 2.测试方法及数据
- 测试方法采用逐过程、逐语句、断点等测试方法。
- 测试数据为多名同学的姓名、学号、各科成绩。
## 3.遇到的问题及解决方法
问题1:如何设计出友好界面
- 解决方法:搜集资料,通过等语句设计版面
```c++
printf("\n\n");
printf("\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n\n\n");
printf("\t\t║* * * * * * * * * * * * * * * * * * * * * *║\n");
```
问题2:主要流程如何设计
- 解决方法:主函数进入,先读取db文件,进入欢迎界面,再由菜单界面及键盘输入调用不同函数进行学生成绩数据的处理及退出(包括写入db文件)。
问题3:如何定义结构
- 解决方法:定义学生结构,包括姓名,学号 ,高数成绩 ,英语成绩,物理成绩,C语言成绩 ,平均分数,总分数几个元素。
问题4:如何读写文件
- 解决方法:定义两个函数,用
```c++
fopen("data.db", "rb");
fread(&num, 1, sizeof(num), fp);
fclose(fp);
```
来读取,用
```c++
fopen("data.db", "wb+");
fwrite(&num, 1, sizeof(num), fp);
fclose(fp);
```
来写入。
问题5:如何录入、修改、删除、排序数据
解决方法:定义函数。录入:num加一,计算出相应总分,均分。修改:先通过姓名或学号查找到该学生,再次输入修改后的信息。删除:先通过姓名或学号查找到该学生,将后面的学生补到前面,num减一。排序:先通过选择科目确定排序数据,再建立两个student临时结构t、s1,对其元素赋值并比较排序最终输出。
问题6:
| 严重性 |代码 |说明 |项目 |文件 |行 |
|----|----|----|----|----|----|
| 错误 |LNK1168 |无法打开 D:\projects\成绩管理系统\Debug\成绩管理系统.exe 进行写入 |成绩管理系统 |D:\1puyao\projects\成绩管理系统\成绩管理系统\LINK |1 |
解决方法:原来的运行程序没关闭无法再次建立新项目,关闭即可。
## 4.小结(收获和建议)
收获:
通过本次课程设计,我学会了文件的读写方式,了解了文件中数据是以进位制读取以及保存的。例如:在c语言的文件操作语法中,打开文件就有以下12种方式:
![](https://www.writebug.com/myres/static/uploads/2021/10/26/c7bcf349602e8023dfaf3cf0beb3a7bc.writebug)
其中,二进制模式与文本模式操作相似,只不过是以二进制流的形式读写而已,下面以文本模式为例分析:
```c++
"r" 模式:
```
- 打开文件进行“只读”操作,即只能从文件读取内容。
- 若欲操作的文件不存在,则打开失败。
- 成功打开文件时,文件指针位于文件开头。
- 打开文件后,不会清空文件内原有内容。
- 可从文件中任意位置读取内容。
```c++
"w" 模式:
```
- 打开文件进行“只写”操作,即只能向文件写入内容。
- 若欲操作的文件不存在,则新建文件。
- 成功打开文件时,文件指针位于文件开头。
- 打开文件后,会清空文件内原有的内容。
- 可向文件中任意位置写入内容,且进行写入操作时,会覆盖原有位置的内容。
```c++
"a" 模式:
```
- 打开文件进行“追加”操作,即只能向文件写入内容。
- 若欲操作的文件不存在,则新建文件。
- 成功打开文件时,文件指针位于文件结尾。
- 打开文件后,不会清空文件内原有内容。
- 只能向文件末尾追加(写)内容。
```c++
"r+"模式:
```
- 打开文件进行“读写”操作,即既可读取,又可写入。
- 若欲操作的文件不存在,则打开失败。
- 成功打开文件时,文件指针位于文件开头�
神仙别闹
- 粉丝: 4324
- 资源: 7532
最新资源
- MATLAB代码:n阶机械臂单、多智能体控制 关键词:n阶机械臂单 多智能体 单智能体 参考文档: 1.《Proximal Policy Optimization Algorithms》 2.As
- 双向CLLLC谐振闭环仿真,软开关和谐振波形完美,高压侧380-430v,低压侧40-54v,过谐振欠谐振满载轻载均实现软开关,送文献详细设计
- 考虑源荷随机特征的热电联供微网优化matlab 由风电机组、光伏电池、燃料电池、余热锅炉、燃气锅炉、蓄电池以及热电负荷构成的热电联供型微网系统,考虑风电、光伏功率以及热电负荷的随机性,应用机会约束规划
- 基于stm32的智能家居控制系统仿真设计① 其它仿真设计也可以加好友 实现功能: 1、有两种控制模式,分别是自动模式(默认)和手动模式,按下“模式切”键可以切模式 2、自动模式中温湿度传感器(DHT1
- Matlab pcode p文件 p代码 p文件代转m文件,pcode文件解密工具,p文件转m文件 p代码还原 p代码解密 全网最便宜 非倒卖
- 西门子PLC200smart,3轴控制程序,西门子V90 西门子触摸屏程序, 有详细注释和IO表,电气原理图
- STM32运动控制 采用stm32作为主控 支持4轴联动, 直线插补,圆弧插补 支持4轴电机控制, 包括加减速控制,注释齐全 位置环控制 支持位置控制,编码器反馈 包括原理图,源代码 量产工控机代码
- 基于PLC的多种液体混合装置,采用博途软件编写,全自动仿真,提供程序,画面,流程图,接线图,IO分配表及优质的后服务 实现功能(详见上方演示视频): 按下起动按钮,电磁阀 Y1 闭合,开始注入液体
- 基于二进制粒子群算法的配电网故障诊断-Matlab 应用选取配电网故障诊断,采用二进制粒子群优化算法
- Buck-boost变器仿真模型,包含反相buckboost和四管同相buckboost,基于MATLAB Simulink建模仿真 输出电压闭环控制模型,适合入门学习使用 仿真模型使用MATLA
- 8工位转盘螺丝机程序 包括PLC程序,威纶通触摸屏程序,IO表,参数设置 1个步进电机,2台伺服台达B2系列,拧螺丝的伺服用转矩模式 大量三菱PLC,三菱伺服,松下伺服,步进,变频器四频教程 work
- 基于MATLAB的2FSK调制解调系统设计 MATLAB代码设计程序, 纯.m代码和simulink仿真的都有, 有相干解调和非相干解调两种方式
- FPGA实现74LS160计数器功能Verilog程序+仿真 用 Verilog 语言设计一个和 TTL 电路功能相同的74LS160 同步十进制计数器,参考74LS160 的pdf 文档,用仿真测试
- maxwell永磁同步电机设计,无刷电机,开关磁阻电机,单相感应电机,三相感应电机,伺服电机,高速电机,串激电机,同步电机,结构设计,多物理场联合仿真,热仿真,优化降本降噪 永磁同步电机设计报告,项目
- MATLAB环境下一种一维时间序列信号前处理:信号去趋势项和信号平滑方法 程序运行环境为MATLAB,程序执行一维时间序列信号去趋势项和信号平滑 去趋势项方法:滑动平均法消除趋势项,最小二乘法消除多
- 一种精英反向和纵横交叉策略的鲸鱼优化算法-Matlab 该算法首先通过精英反向学习策略初始化种群,以提高初始解的质量,加快全局收敛速度; 其次,采用逆不完全Γ函数更新收敛因子来平衡算法全局探索和局部开
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈