<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
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备
资源推荐
资源详情
资源评论
收起资源包目录
C语言开发简单的学生成绩管理系统.zip (31个子文件)
cm
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
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- postgresql-42.7.3.jar
- 2024-05-21 20-36-43.mkv
- 基于QT+C++的智能云监护仪项目,能够实时显示使用者心电、血氧、血压波形及其它各种参数+源码(毕业设计&课程设计&项目开发)
- 基于java开发的app接收硬件端传输的心音信号,具有显示心音波形,发出心音的功能+源码(毕业设计&课程设计&项目开发)
- Python 程序语言设计模式思路-行为型模式:职责链模式:将请求从一个处理者传递到下一个处理者
- 9241703124789646.16健身系统2.apk
- postgresql-16.3-1-windows-x64.exe
- Python 程序语言设计模式思路-结构型模式:装饰器讲解及利用Python装饰器模式实现高效日志记录和性能测试
- 基于YOLOv5和DeepSORT的多目标跟踪仿真与记录
- Python 程序语言设计模式思路-创建型模式:原型模式:通过复制现有对象来创建新对象,面向对象编程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功