# 学生成绩管理系统
## 设计要求
- 利用所学的知识、理论和实际结合,利用资源,采用模块化的结构,使用模仿修改自主设计相结合的方法,锻炼学生综合分析解决实际问题的编程能力
- 通过 C 语言各个函数功能来实现对学生信息的管理,学生信息包括学生姓名,学号,各科成绩;管理方式包括对学生信息的录入,保存,排序,查找、修改、删除等功能
## 算法分析
![](https://www.writebug.com/myres/static/uploads/2021/11/9/9d6b4e425906765028aa6a71565bb07c.writebug)
函数功能和函数之间的调用关系
```c++
//函数声明
Stu_i input_stu(void); // 通过提示引导用户正确地输入一条学生记录,并返回这条记录
void output_stu(int i); // 根据数组索引打印出对应的学生信息
int find_stu(void); // 通过提示引导用户查找记录,如果找到则显示查找到的记录,并返回数组索引,否则返回-1
void read_stu(const char *filename); // 根据文件名读入文件中的学生数据
void write_stu(const char *filename); // 将学生数据写入到指定的文件中
int confirm(const char *words); // 请求用户确认,输入y或Y返回1,输入n或N返回0,其他情况提示用户重新输入
void safe_flush(FILE *fp); // safe_flush(stdin)清理多余的输入,防止影响下次获取输入
```
## 函数实现
**录入学生成绩**
```c++
Stu_i input_stu(void) {
Stu_i ret;
puts("依次输入姓名、语文、数学、外语成绩,空格分隔,成绩要求是整数:");
while ( 4 != scanf("%s%d%d%d", ret.name,
&ret.score[0],
&ret.score[1],
&ret.score[2])) {
safe_flush(stdin);
puts("输入有误,请重新输入!");
}
safe_flush(stdin);
ret.sum = ret.score[0] + ret.score[1] + ret.score[2];
return ret;
}
```
**输出学生信息**
```c++
void output_stu(int i) {
if (i < 0 || i > MAX) return;
printf("%s\t语:%d\t数:%d\t外:%d\t总分:%d\n",
stu[i].name,
stu[i].score[0],
stu[i].score[1],
stu[i].score[2],
stu[i].sum);
}
```
**查找学生信息**
```c++
int find_stu(void) {
char name[NAME_LEN];
int i;
printf("输入姓名(限%d个字符):", NAME_LEN);
scanf("%s", name);
safe_flush(stdin);
for (i = 0; i < num; i++) {
if (0 == strcmp(stu[i].name, name)) {
output_stu(i);
return i;
}
}
puts("没有找到记录!");
return -1;
}
```
**读取学生数据**
```c++
void read_stu(const char *filename) {
FILE *fp = fopen(filename, "rt");
if (NULL != fp) {
fread(&num, sizeof(int), 1, fp);
fread(stu, sizeof(Stu_i), num, fp);
}
fclose(fp);
}
```
**保存学生信息**
```c++
void write_stu(const char* filename) {
FILE *fp = fopen(filename, "wt");
if (NULL != fp) {
fwrite(&num, sizeof(int), 1, fp);
fwrite(stu, sizeof(Stu_i), num, fp);
fclose(fp);
puts("保存成功!");
}
else puts("打开文件失败!");
}
```
**主函数**
```c++
int main(void) {
//设置窗口大小
system("mode con:cols=100 lines=35");
//设置窗口字体的颜色
system("color B");
const char *filename = "stu_info.txt";
read_stu(filename); // 导入数据
printf("************************欢迎使用学生成绩管理系统*************************\n"
" \n"
" \n"
"****************-当前已有%d条记录,本程序限制%d条记录***********************\n"
"---------------------------------------------------------------------------\n",
num, MAX);
for (;;) {
char choice;
int i, j;
printf( " 菜单:\n"
" * 1.查找\n"
" * 2.追加\n"
" * 3.删除\n"
" * 4.修改\n"
" * 5.排序\n"
" * 6.显示\n"
" * 7.保存\n"
" * 0.退出\n"
" 输入序号:");
choice = getchar();
safe_flush(stdin);
switch (choice) {
case '1': // 查找
find_stu();
break;
case '2': // 追加
if (num < MAX) {
stu[num] = input_stu();
output_stu(num);
num++;
puts("追加成功!");
}
else puts("记录已满,无法追加!");
break;
case '3': // 删除
= find_stu();
if (-1 != i) {
if (confirm("确认删除?")) {
while (i++ != num) {
stu[i-1] = stu[i];
}
num--;
puts("删除成功!");
}
}
break;
case '4': // 修改
= find_stu();
if (-1 != i) {
stu[i] = input_stu();
output_stu(i);
puts("修改成功!");
}
break;
case '5': // 按照总分排序
for (i = 0; i < num-1; i++) // 冒泡排序中已经排好的
for (j=0; j < num-1-i; j++) // 遍历没排好的
if ( stu[j].sum < stu[j+1].sum ) {
Stu_i t = stu[j];
stu[j] = stu[j+1];
stu[j+1] = t;
}
puts("排序成功!");
/* fall through */ // 完成排序后自动显示
case '6': // 显示
for (i = 0; i < num; i++) {
printf("%4d:\t", i+1);
output_stu(i);
}
break;
case '7': // 保存
write_stu(filename);
break;
case '0': // 退出
if (confirm("推出前保存?(Y/N)")) {
write_stu(filename);
}
exit(0);
default:
puts("没有该序号!请重新输入");
break;
}
} // END for
return 0;
}
```
## 学习总结
学生信息管理系统虽然是个小程序,但其中也体现了一定的结构化思想,对于编程也是用一定用处的。
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++实现(控制台)学生成绩管理系统
共7个文件
txt:1个
png:1个
md:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 166 浏览量
2023-07-31
10:07:58
上传
评论
收藏 101KB ZIP 举报
温馨提示
本项目旨在通过C语言的程序设计基础的掌握,对学生成绩管理系统进行编写程序。首先,通过数组这一数据结构来对学生的信息进行录入以及操作,在其过程中,通过各个功能语句以及选择结构,循环结构等方式的结合来达到所要实现的程序功能。最后通过对C语言中对文件的操作,对已有学生成绩的读取和新建学生成绩的录入保存。
资源推荐
资源详情
资源评论
收起资源包目录
基于C++实现(控制台)学生成绩管理系统.zip (7个子文件)
c-student
学生成绩管理系统.exe 134KB
报告.docx-md
1-bd77bc3e4d4c7cb6b52dc5d3a4ee972f.png 20KB
LICENSE 1KB
学生成绩管理系统.cpp 7KB
报告.docx 39KB
README.md 7KB
stu_info.txt 68B
共 7 条
- 1
资源评论
神仙别闹
- 粉丝: 2674
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功