<h1>学生成绩管理系统</h1>
<h5>开发语言:C语言</h5>
<h5>开发工具:Visual Studio 2019</h5>
<h5>开发时间:2019.4.14</h5>
<h5>开发者:summer</h5>
[一、系统使用展示](#1)
[二、系统功能](#2)
[三、菜单](#3)
[四、录入学生信息](#4)
[五、打印学生信息](#5)
[六、保存学生信息](#6)
[七、读取学生信息](#7)
[八、统计所有学生人数](#8)
[九、查找学生信息](#9)
[十、修改学生信息](#10)
[十一、删除学生信息](#11)
[十二、退出系统](#12)
[十三、出错](#13)
<h3 id="1">一、系统使用展示</h3>
![Alt](demo.gif)
<h3 id="2">二、系统功能</h3>
1. 系统功能介绍
```
1.录入学生信息:用户可以自由输入学生信息到系统中。
2.打印学生信息:格式化展示系统中的学生信息。
3.保存学生信息:将系统中的学生信息保存到本地文档。
4.读取学生信息:读取本地文档中的学生信息并显示。
5.统计所有学生人数
6.查找学生信息:根据用户给定的信息(学号)在系统中查找该学生的信息
7.修改学生信息
8.删除学生信息
0.退出系统
```
2. 系统main函数,while循环在外,系统程序能够持续运行,switch判断语句进行功能选择与函数切换。
```C
int main() {
while (1)
{
//打印菜单
Menu();
//读取一个字符 整数,字符在内存中映射为ASCII码
char ch = _getch();
switch (ch)
{
case '1'://1.录入学生信息
InputStudent();
break;
case '2'://2.打印学生信息
PrintStudent();
break;
case '3'://3.保存学生信息
SaveStudent();
break;
case '4'://4.读取学生信息
ReadStudent();
break;
case '5'://5.统计所有学生人数
CountStudent();
break;
case '6'://6.查找学生信息
FindStudent();
break;
case '7'://7.修改学生信息
ChangeStudent();
break;
case '8'://8.删除学生信息
DeleteStudent();
break;
case '0'://0.退出系统
return 0;
break;
default:
printf("输入有误,没有该功能\n\n");
system("pause"); //暂停
system("cls"); //清屏
break;
}
}
return 0;
}
```
<h3 id="3">三、菜单</h3>
1. 菜单显示
```C
//菜单
void Menu() {
printf("*************************************************\n");
printf("*\t欢迎使用高校学生成绩管理系统V1.0\t*\n");
printf("*\t\t请选择功能\t\t\t*\n");
printf("*************************************************\n");
printf("*\t\t1.录入学生信息\t\t\t*\n");
printf("*\t\t2.打印学生信息\t\t\t*\n");
printf("*\t\t3.保存学生信息\t\t\t*\n");
printf("*\t\t4.读取学生信息\t\t\t*\n");
printf("*\t\t5.统计所有学生人数\t\t*\n");
printf("*\t\t6.查找学生信息\t\t\t*\n");
printf("*\t\t7.修改学生信息\t\t\t*\n");
printf("*\t\t8.删除学生信息\t\t\t*\n");
printf("*\t\t0.退出系统\t\t\t*\n");
printf("*************************************************\n");
}
```
2. 打印菜单
scanf()、getchar()输入后均需要按enter,而getch()不用
```C
//打印菜单
Menu();
//读取一个字符 整数,字符在内存中映射为ASCII码
char ch = _getch();
```
<h3 id="4">四、录入学生信息</h3>
1. 定义学生结构体、链表节点结构体
```C
//定义一个学生
typedef struct tagStudent {
char szName[20]; //姓名
char szSex[4]; //性别
int nAge; //年龄
int nStuNo; //学号
int nScore; //成绩
}Student;
//链表
//节点
typedef struct tagNode
{
Student stu; //学生信息
struct tagNode* pNext; //指向下一个节点
}Node;
//创建头节点
Node* g_pHead = NULL; //指向头节点
```
2. 利用学生结构体,以及链表操作输入学生信息
```C
//1.录入学生信息
void InputStudent() {
//创建一个人,在堆中分配内存
Node* pNewNode = (Node*)malloc(sizeof(Node));
//指针下一个指向空
pNewNode->pNext = NULL;
//查找链表的尾结点
Node* p = g_pHead;
while (g_pHead != NULL && p->pNext != NULL)
{
p = p->pNext;
}
//把节点插到链表的尾节点
if (g_pHead == NULL) {
g_pHead = pNewNode;
}
else {
p->pNext = pNewNode;
}
//录入学生信息
printf("请输入学生姓名:\n");
scanf_s("%s", pNewNode->stu.szName, sizeof(pNewNode->stu.szName));
printf("请输入性别:\n");
scanf_s("%s", pNewNode->stu.szSex, sizeof(pNewNode->stu.szSex));
printf("请输入学生年龄:\n");
scanf_s("%d", &pNewNode->stu.nAge);
printf("请输入学号:\n");
scanf_s("%d", &pNewNode->stu.nStuNo);
printf("请输入成绩:\n");
scanf_s("%d", &pNewNode->stu.nScore);
printf("学生信息录入成功。\n\n");
system("pause");
system("cls");
}
```
<h3 id="5">五、打印学生信息</h3>
1. 读取链表结构,输出学生信息。先进行判空处理,如果无学生信息则输出提示信息,反之则正确输出学生信息。
```C
//2.打印学生信息
void PrintStudent() {
system("cls");
//遍历链表
Node* p = g_pHead;
if (p == NULL) {
printf("系统中暂无学生信息,请录入后再来打印查看。\n\n");
}
else {
printf("*********************************************************************************\n");
printf("*\t\t\t欢迎使用高校学生成绩管理系统V1.0\t\t\t*\n");
printf("*********************************************************************************\n");
printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");
printf("*********************************************************************************\n");
while (p != NULL)
{
printf("*\t%d\t*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\n",
p->stu.nStuNo,
p->stu.szName,
p->stu.szSex,
p->stu.nAge,
p->stu.nScore
);
//下一个节点
p = p->pNext;
printf("*********************************************************************************\n");
}
}
system("pause");
system("cls");
}
```
<h3 id="6">六、保存学生信息</h3>
1. 利用文件对学生信息进行存储
```C
//3.保存学生信息
void SaveStudent() {
//打开文件
FILE* pFile;
pFile = fopen(".\\stuinfo.dat", "w");
if (pFile == NULL) {
printf("打开文件失败。\n");
return;
}
//写入数据
Node* p = g_pHead;
while (p != NULL)
{
fwrite(&p->stu, sizeof(Node), 1, pFile);
p = p->pNext;
}
//关闭文件
fclose(pFile);
printf("数据保存成功。\n");
system("pause");
system("cls");
}
```
2. fopen在vs中会报错,解决方式
(1)按照vs的提示,将fopen换成fopen_s
(2)不修改函数,仅仅修改项目的属性。因为fopen_s是一种Microsoft的函数,若纯做Windows开发则直接改为_s也无妨,但是我们尽量还是用标准C++比较好,这样代码有较好的移植性。
具体操作:
右键工程名–>属性–>C/C++–>预处理器–>预处理器定义,编辑右边输入框加入: _CRT_SECURE_NO_WARNINGS
保存(注意用分号隔开)。
<h3 id="7">七、读取学生信息</h3>
1. 打开存储学生信息的文本,单个单词读取,判断非分隔符或者空时则赋值给链表中的节点,读取完毕后,直接调用PrintStudent()函数进行打印结果。
```C
//4.读取学生信息
void ReadStudent() {
system("cls");
//打开文件
FILE* pFile;
pFile = fopen(".\\stuinfo.dat", "r");
if (pFile == NULL) {
printf("打开文件失败。\n");
return;
}
//创建一个人,在堆中分配内存
Node* p = (Node*)malloc(sizeof(Node));
p->pNext = NULL;
//重新建立链表
g_pHead = p;
//逐个单词读入文本内容
char str[200];
int i = 0;
while (fscanf(pFile, "%s", str) != EOF) { //读文件
//单词不是*或者空时,进行赋值
if (strcmp(str, "*") && str != NULL) {
switch (i)
{
case 0:
p->stu.nStuNo = atoi(str);
break;
case 1:
strcpy(p->stu.szName, str);
break;
case 2:
strcpy(p->stu.szSex, str);
break;
case 3:
p->stu.nAge = atoi(str);
break;
case 4:
p->stu.nScore = atoi(str
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
项目资源具有较高的学习借鉴价值,也可直接拿来修改复现。可以在这些基础上学习借鉴进行修改和扩展,实现其它功能。可下载学习借鉴,你会有所收获。 源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可 项目资源具有较高的学习借鉴价值,也可直接拿来修改复现。可以在这些基础上学习借鉴进行修改和扩展,实现其它功能。可下载学习借鉴,你会有所收获。 源码是经过本地编译可运行的,下载完成之后配置相应环境即可使用。源码功能都是经过老师肯定的,都能满足要求,有需要放心下载即可 可下载学习借鉴,你会有所收获。可下载学习借鉴,你会有所收获。可下载学习借鉴,你会有所收获。# 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。2. 部分字体以及插图等来自网络,若是侵权请联系删除。
资源推荐
资源详情
资源评论
收起资源包目录
C语言开发简单的学生成绩管理系统.zip (31个子文件)
archieC316
StudentManageSystem
StudentManageSystem.cpp 9KB
appendix
20190415_200358.mp4 824KB
StudentManageSystem.md 15KB
20190415_200600.gif 567KB
stuinfo.dat 92B
StudentManageSystem.vcxproj 6KB
.vs
StudentManageSystem
v16
Browse.VC.db 5.23MB
.suo 31KB
ipch
AutoPCH
a6730596ebf88ad0
STUDENTMANAGESYSTEM.ipch 3.63MB
215e20dca6177113
STUDENTMANAGESYSTEM.ipch 3.25MB
StudentManageSystem.vcxproj.filters 1KB
StudentManageSystem.h 785B
StudentManageSystem.vcxproj.user 165B
Debug
StudentManageSystem.log 140B
vc142.idb 51KB
vc142.pdb 84KB
StudentM.41E8BB15.tlog
CL.write.1.tlog 568B
CL.command.1.tlog 782B
StudentManageSystem.lastbuildstate 213B
link.command.1.tlog 1KB
link.read.1.tlog 3KB
link.write.1.tlog 636B
CL.read.1.tlog 4KB
StudentManageSystem.exe 46KB
StudentManageSystem.ilk 392KB
StudentManageSystem.pdb 588KB
StudentManageSystem.obj 39KB
StudentManageSystem.sln 1KB
LICENSE 8KB
README.md 15KB
demo.gif 567KB
共 31 条
- 1
资源评论
阿齐Archie
- 粉丝: 1w+
- 资源: 2303
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- mc.as
- 618家具社群团购清单.xlsx
- Javascript的鼠标手势
- hdmi in视频采集,输出到hdmi out, 支持HDMI指令控制,支持TFTP远程下载图片
- 批量word文件内容替换工具1.0 (批量实现多个 Word 文档文件文字替换利器).exe
- Cartoon GUI Pack 1.2.zip
- 我分享个魔兽内存修改器
- Python毕业设计基于Django的网易云数据分析可视化大屏系统的设计与实现+使用说明+全部资料(优秀项目).zip
- mp3 idv2,idv1,frame分析工具
- 鹈鹕优化算法POA MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功