<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) { //读文件
//单词不是*或�
C/C++-数据结构-成绩管理系统-课设
需积分: 0 41 浏览量
更新于2023-01-31
1
收藏 4.88MB ZIP 举报
开发语言:C语言
开发工具:Visual Studio 2019
项目源码只有 StudentManageSystem.cpp 和 StudentManageSystem.h 两个文件
适合大一或者大二初学C语言用作课设参考
本项目已在windows平台下调测通过,有问题请通过csdn私信联系我
功能如下:
一、系统使用展示
请下载后查看demo.gif
二、系统功能
1.录入学生信息:用户可以自由输入学生信息到系统中。
2.打印学生信息:格式化展示系统中的学生信息。
3.保存学生信息:将系统中的学生信息保存到本地文档。
4.读取学生信息:读取本地文档中的学生信息并显示。
5.统计所有学生人数
6.查找学生信息:根据用户给定的信息(学号)在系统中查找该学生的信息
7.修改学生信息
8.删除学生信息
0.退出系统
三、菜单
四、录入学生信息
五、打印学生信息
六、保存学生信息
七、读取学生信息
八、统计所有学生人数
九、查找学生信息
十、修改学生信息
十一、删除学生信息
十二、退出系统
十三、出错
csdnGuoYuying
- 粉丝: 198
- 资源: 111
最新资源
- 上海牛津英语_高中一年级上_词汇提炼.doc
- 数学源于生活用于生活.doc
- 苏教版四年级(下册)按课文填空.doc
- 苏版四年级(上册)数学第四单元教学案.doc
- 我国农业银行笔试题目和答案.doc
- 网络安全知识试题库完整.doc
- 我国农业机械化的现状和发展趋势.doc
- 五年级解方程及应用题知识点及例题.doc
- 系学生会学习部申请书(精选多篇).doc
- 小学生科技活动辅导教学案.doc
- 小学数学课堂教学中小组合作学习的有效性.doc
- weixin411医疗就诊微信小程序设计与实现开发-0d26l+django .zip
- 学校团委书记竞聘演讲稿[精选多篇].doc
- 学校消防工作计划(精选多篇).doc
- 一级锅炉水处理试题和答案.doc
- 义务教育阶段双语教育新教双语教学质量评估自查自评报告.doc