制作学生成绩管理系统,可以实现以下功能:
- 每条记录包括:学号、姓名、专业和5门课程的成绩;
- 能够实现添加、删除、修改功能;
- 能够计算某学生的总分和平均分;
- 能按照总分排序输出;
利用C语言的基本语法、结构化程序设计、数组、函数、结构体、指针、链表、排序算法、文件存储等,制作一个具有添加、删除、修改等功能的学生成绩管理系统,包含学号、姓名、专业和5门课程的成绩这个四个大方面的内容,流程图如图1所示。
- 详细设计及实现
学生成绩管理系统有帮助,刷新,查询,增加,删除,显示,保存,退出,清屏这些功能,要实现这些功能,需要用到很多函数,结构体,文件操作,链表,指针等,在这里会详细介绍各类函数以及其他知识点所对应的用法,
一 头文件
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
做这个学生成绩管理系统需要用到这四个头文件:
①#include <stdlib.h>:
常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()...用清屏功能以及删除链表释放内存时要用到system("cls");free(p),如图2所示。
图2 free函数使用的代码图
②#include <malloc.h>
动态存储分配函数头文件,当对内存区进行操作时,调用相关函数.
在使用链表时,创建新的指针时用到malloc(sizeof(LinkList)函数
如图三所示。
图3 malloc函数使用的代码图
③#include <string.h>
用系统的添加,修改功能时将字符串数组赋值给另一个字符串数组,需要字符串链接函数;strcpy()字符串复制函数,就需要使用#include <string.h> 这个头文件。
typedef struct score
{
int score_c; //C语言成绩
int score_math; //高等数学
int score_english; //大学英语成绩
int score_zhengzhi;//政治成绩
int score_tiyu;//体育成绩
}Score;
学生个体的信息,包括姓名,学号,专业,成绩
typedef struct Student
{
char name[100]; //姓名
char num[100]; //学号
char zhuanye[100]; //专业
Score score; //成绩
}stu;
对链表的使用创立的个体包含两个对象,一个是data,还有个指针next
typedef struct LNode
{
stu data;
struct LNode *next;
}LinkList;
三 链表的使用
创立一个链表,首先要对它初始化:指针L相当于是头指针
void InitList(LinkList *&L)//初始化链表
{
L=(LinkList *)malloc(sizeof(LinkList)); //指针L相当于是头指针head
L->next=NULL;
}
添加新的链表:
void ListInsert(LinkList *&L,LinkList *p)//插入新的节点
{
LinkList *q=NULL;
q=L;
p->next=q->next; //
q->next=p;
创立的第一个节点的时候q->的next就为NULL,再创一个节点的话相当于把它插入到两节点之间, 重新指向p,连接上新的节点(p)
后面的添加学生,修改信息,删除,排序都是在上面的基础上进行的,待会函数的时候在分别介绍。
四 选择控制结构,函数调用
在一开始时,使用系统需要我们选择使用哪个功能,输入0~9之间的整数就可以使用不同的功能,这里需要用到选择控制结构:
while(1) //无限循环,当用户使用完某一项功能后,界面就会弹出选择表
{
printf("\n");
menu(); //功能菜单
printf("请输入您的选择:\n");
scanf("%d",&choose);
switch(choose)
{
case 0://系统帮助及说明
help();
break;
case 1://刷新信息(按学号排序)
sort(L);
break;
case 2: //查询学生信息
findstu(L);
break;
case 3://修改学生信息
changestu(L);
break;
case 4://增加学生信息
addstu(L);
break;
case 5://删除学生信息
deletestu(L);
break;
case 6://输出所有学生的信息
display(L);
break;
case 7://保存学生信息到文件
saveStuDentFile(L);
break;
case 8://退出
printf("谢谢使用!");
exit(0);
case 9: //清屏