中国继续教育网_助力学生自学考试学历提升

欢迎访问中国继续教育网!中国继续教育网:学历提升,文凭提升,自学考试,成人高考,出国留学等相关知识科普和分享!

C语言开发简单的学生成绩管理系统(附源码)(如何用c语言编写学生成绩管理系统源代码)

2023-08-18分类:网络营销 阅读:124

一、系统使用展示

二、系统功能

系统功能介绍

1.录入学生信息:用户可以自由输入学生信息到系统中。

2.打印学生信息:格式化展示系统中的学生信息。

3.保存学生信息:将系统中的学生信息保存到本地文档。

4.读取学生信息:读取本地文档中的学生信息并显示。

5.统计所有学生人数

6.查找学生信息:根据用户给定的信息(学号)在系统中查找该学生的信息

7.修改学生信息

8.删除学生信息

0.退出系统

系统main函数,while循环在外,系统程序能够持续运行,switch判断语句进行功能选择与函数切换。

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;

cas黄桃直播免费下载e 8://8.删除学生信息

DeleteStudent();

break;

case 0://0.退出系统

return 0;

break;

default:

printf("输入有误,没有该功能 ");

system("pause"); //暂停

system("cls"); //清屏

break;

}

}

return 0;

}

三、菜单

菜单显示

//菜单

void Menu() {

printf("************************************************* ");

printf("* 欢迎使用高校学生成绩管理系统V1.0 * ");

printf("* 请选择功能黄桃直播免费下载t * ");

printf("************************************************* ");

printf("* 1.录入学生信息 * ");

printf("* 2.打印学生信息 * ");

printf("* 3.保存学生信息 * ");

printf("* 4.读取学生信息 * ");

printf("* 5.统计所有学生人数 * ");

printf("* 6.查找学生信息 * ");

printf("* 7.修改学生信息 *黄桃直播免费下载n");

printf("* 8.删除学生信息 * ");

printf("* 0.退出系统 * ");

printf("************************************************* ");

}

打印菜单

scanf()、getchar()输入后均需要按enter,而getch()不用

//打印菜单

Menu();

//读取一个字符 整数,字符在内存中映射为ASCII码

char ch = _getch();

四、录入学生信息

定义学生结构体、链表节点结构体

//定义一个学生

typedef struct tagStudent {

char szN黄桃直播免费下载ame[20]; //姓名

char szSex[4]; //性别

int nAge; //年龄

int nStuNo; //学号

int nScore; //成绩

}Student;

//链表

//节点

typedef struct tagNode

{

Student stu; //学生信息

struct tagNode* pNext; //指向下一个节点

}Node;

//创建头节点

Node* g_pHead = NULL; //指向头节点

利用学生结构体,以及链表操作输入学生信息

//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("请输入学生姓名: ");

scanf_s("%s", pNewNode->stu.szName, sizeof(pNewN黄桃直播免费下载ode->stu.szName));

printf("请输入性别: ");

scanf_s("%s", pNewNode->stu.szSex, sizeof(pNewNode->stu.szSex));

printf("请输入学生年龄: ");

scanf_s("%d", &pNewNode->stu.nAge);

printf("请输入学号: ");

scanf_s("%d", &pNewNode->stu.nStuNo);

printf("请输入成绩: ");

scanf_s("%d", &pNewNode->stu.nScore);

printf("学生信息录入成功。 ");

system(黄桃直播免费下载"pause");

system("cls");

}

五、打印学生信息

读取链表结构,输出学生信息。先进行判空处理,如果无学生信息则输出提示信息,反之则正确输出学生信息。

//2.打印学生信息

void PrintStudent() {

system("cls");

//遍历链表

Node* p = g_pHead;

if (p == NULL) {

printf("系统中暂无学生信息,请录入后再来打印查看。 ");

}

else {

printf("********************************************************************************* 黄桃直播免费下载");

printf("* 欢迎使用高校学生成绩管理系统V1.0 * ");

printf("********************************************************************************* ");

printf("* 学号 * 姓名 * 性别 * 年龄 * 成绩 * ");

printf("********************************************************************************* ");

while (p != NUL黄桃直播免费下载L)

{

printf("* %d * %s * %s * %d * %d * ",

p->stu.nStuNo,

p->stu.szName,

p->stu.szSex,

p->stu.nAge,

p->stu.nScore

);

//下一个节点

p = p->pNext;

printf("********************************************************************************* ");

}

}

system("pause");

system("cls");

}

六、保存学生信息

利用文件对学生信息进行存储

//3.保存学生信息

voi黄桃直播免费下载d SaveStudent() {

//打开文件

FILE* pFile;

pFile = fopen(".\stuinfo.dat", "w");

if (pFile == NULL) {

printf("打开文件失败。 ");

return;

}

//写入数据

Node* p = g_pHead;

while (p != NULL)

{

fwrite(&p->stu, sizeof(Node), 1, pFile);

p = p->pNext;

}

//关闭文件

fclose(pFile);

printf("数据保存成功。 ");

system("pause");

system("cls");

}

fopen在vs中会报错,黄桃直播免费下载解决方式

▪ (1)按照vs的提示,将fopen换成fopen_s

▪ (2)不修改函数,仅仅修改项目的属性。因为fopen_s是一种Microsoft的函数,若纯做Windows开发则直接改为_s也无妨,但是我们尽量还是用标准C++比较好,这样代码有较好的移植性。

具体操作:

右键工程名–>属性–>C/C++–>预处理器–>预处理器定义,编辑右边输入框加入:_CRT_SECURE_NO_WARNINGS

保存(注意用分号隔开)。

七、读取学生信息

打开存储学生信息的文本,单个单词读取,判断非分隔符或者空时则赋值给链表中的节点,读取完毕后,直接调用PrintStudent()函数进行打印结果。

//4.读取学黄桃直播免费下载生信息

void ReadStudent() {

system("cls");

//打开文件

FILE* pFile;

pFile = fopen(".\stuinfo.dat", "r");

if (pFile == NULL) {

printf("打开文件失败。 ");

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);

break;

default:

Node* pNewNode = (Nod黄桃直播免费下载e*)malloc(sizeof(Node));

pNewNode->pNext = NULL;

p->pNext = pNewNode;

p = pNewNode;

p->stu.nStuNo = atoi(str);

i = 0;

break;

}

i++;

}

}

//打印读取结果

PrintStudent();

}

读取文本时,将内容全部赋值给char数组,所有赋值时需特殊处理。char数组赋值给整数

在<stdlib.h>头文件中有两个函数,int atoi(char *p)和char *itoa(int p),分别将装有整数的char数组转化为整数,和将整数按位数分解依次存入char数组中。

char数组赋值给c黄桃直播免费下载har数组

用strcpy函数!

原型声明:extern char *strcpy(char *dest,char *src);

头文件:string.h

功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回指向dest的指针。

注:不能使用memcpy(a, b, strlen(b)),会导致中文乱码。

八、统计所有学生人数

设置计数器,遍历链表

//5.统计所有学生人数

void CountStudent() {

int countStu = 0;

//遍历链表

Node* p = g_pHead;

wh黄桃直播免费下载ile (p != NULL)

{

countStu++;

p = p->pNext;

}

printf("学生总人数:%d ", countStu);

system("pause");

system("cls");

}

九、查找学生信息

本次查找以学号为示例,改用姓名等信息查询流程基本一致。

遍历链表,如果有符合信息的学生则打印,反之则继续下一个节点,若系统中无该学生信息,给予用户无结果提示。

//6.查找学生信息

void FindStudent() {

system("cls");

//以学号为查找示例,其他信息查找流程基本相似

int stuNum;

printf("请输入查找学生学号:");

scanf("%d"黄桃直播免费下载, &stuNum);

//遍历链表查找,查找到后进行信息显示

Node* p = g_pHead;

//对表头进行展示一次

bool isShowHead = false;

//记录是否有找到该学号的学生信息

bool isFindStu = false;

while (p != NULL)

{

if (stuNum == p->stu.nStuNo) {

if (!isShowHead) {

printf("********************************************************************************* ");

printf("* 学号 *黄桃直播免费下载t姓名 * 性别 * 年龄 * 成绩 * ");

printf("********************************************************************************* ");

isShowHead = true;

}

printf("* %d * %s * %s * %d * %d * ",

p->stu.nStuNo,

p->stu.szName,

p->stu.szSex,

p->stu.nAge,

p->stu.nScore

);

isFindStu = true;

printf("**************黄桃直播免费下载******************************************************************* ");

}

p = p->pNext;

}

if (!isFindStu) {

printf("学号输入有误,系统中暂无该学生信息。 ");

}

system("pause");

system("cls");

}

十、修改学生信息

可参考查找学生信息代码段,在查找后进行修改即可

//7.修改学生信息

void ChangeStudent() {

//以学号为查找示例,其他信息查找流程基本相似

int stuNum;

printf("请输入欲修改学生的学号:");

scanf("%d",黄桃直播免费下载 &stuNum);

//遍历链表查找,查找到后进行信息显示

Node* p = g_pHead;

//对表头进行展示一次

bool isShowHead = false;

//记录是否有找到该学号的学生信息

bool isFindStu = false;

while (p != NULL)

{

if (stuNum == p->stu.nStuNo) {

if (!isShowHead) {

printf("********************************************************************************* ");

printf("* 学号 * 黄桃直播免费下载姓名 * 性别 * 年龄 * 成绩 * ");

printf("********************************************************************************* ");

isShowHead = true;

}

printf("* %d * %s * %s * %d * %d * ",

p->stu.nStuNo,

p->stu.szName,

p->stu.szSex,

p->stu.nAge,

p->stu.nScore

);

//修改学生信息

printf("请输入学生姓名: ");

scanf_s("%s黄桃直播免费下载", p->stu.szName, sizeof(p->stu.szName));

printf("请输入性别: ");

scanf_s("%s", p->stu.szSex, sizeof(p->stu.szSex));

printf("请输入学生年龄: ");

scanf_s("%d", &p->stu.nAge);

printf("请输入学号: ");

scanf_s("%d", &p->stu.nStuNo);

printf("请输入成绩: ");

scanf_s("%d", &p->stu.nScore);

isFindStu = true;

printf("******************黄桃直播免费下载*************************************************************** ");

printf("学生信息修改成功,请注意及时保存。 ");

}

p = p->pNext;

}

if (!isFindStu) {

printf("学号输入有误,系统中暂无该学生信息,无法进行修改。 ");

}

system("pause");

system("cls");

}

十一、删除学生信息

仍然以查找学生信息操作为基础,以学号为线索,查找到则进行删除,未查找到则进行错误提示,删除时需要区分当前节点是头结点、尾节点或者中间节点,不同节点操作不同,同时该删除仅作用于黄桃直播免费下载本次操作,需保存学生信息才能长久生效。

//8.删除学生信息

void DeleteStudent() {

system("cls");

//以学号为查找示例,其他信息查找流程基本相似

int stuNum;

printf("请输入删除学生的学号:");

scanf("%d", &stuNum);

//遍历链表查找,查找到后进行信息显示

Node* p = g_pHead;

//记录前一个节点,删除时方便操作

Node* beforeNode = g_pHead;

//对表头进行展示一次

bool isShowHead = false;

//记录是否有找到该学号的学生信息

bool isFindStu = false;

wh黄桃直播免费下载ile (p != NULL)

{

if (stuNum == p->stu.nStuNo) {

if (!isShowHead) {

printf("********************************************************************************* ");

printf("* 学号 * 姓名 * 性别 * 年龄 * 成绩 * ");

printf("********************************************************************************* ")黄桃直播免费下载;

isShowHead = true;

}

printf("* %d * %s * %s * %d * %d * ",

p->stu.nStuNo,

p->stu.szName,

p->stu.szSex,

p->stu.nAge,

p->stu.nScore

);

isFindStu = true;

printf("********************************************************************************* ");

//删除节点为头节点

if (p == g_pHead) {

g_pHead = p->pNext;

}

//删除黄桃直播免费下载节点为尾节点

else if (p->pNext == NULL) {

p = beforeNode;

p->pNext = NULL;

}

//删除节点为中间节点

else {

beforeNode->pNext = p->pNext;

}

printf("删除成功,请记得保存。 ");

}

beforeNode = p;

p = p->pNext;

}

if (!isFindStu) {

printf("学号输入有误,系统中暂无该学生信息,无法进行删除操作。 ");

}

system("pause");

system("cls");

}

十二、退出系统

直接在选择0时,设置return即可。

十三、出错

用户输入有误时,进黄桃直播免费下载行提示信息输出即可。

printf("输入有误,没有该功能 ");

system("pause"); //暂停

system("cls"); //清屏

部分文章来源于网络,仅作为参考,如果网站中图片和文字侵犯了您的版权,请联系我们处理!

上一篇:C语言---学生成绩管理系统源码(c语言程序设计学生成绩管理系统流程图)

下一篇:微信小程序textarea层级过高的问题及解决办法(微信小程序 怎么制作)

相关推荐

返回顶部