作者: |
male110 |
| 日期: |
2006-12-20 17:02:27 |
|
下载完整程序
在学校时做过,现在又做了一次。
C语言编写一个学员成绩管理系统,学员信息包括,学号,姓名,和三门成绩。相关操作包括添加,删除,修改,浏览,按编号排序,按平均成绩排序。刚开始时没有插入,完全是按自己的想法做的,后来翻开书一看,原来还有插入记录,于是几经修改,就成了现在的样子。
student.h关文件定义了学生的结构记录、与记录相关的信息结构,及记录的添加、删除、修改等函数的声明。如下:
#ifndef STUDENT
#define SIZE 100 //初始化内存大小
#define INCREASE 30 //每次增加的内存大小
struct Student//用来存放学生的记录
{
int num;//学号
char name[30];//姓名
float firstScore;
float secondScore;
float thirdScore;
float avgScore;
bool Isdelete;//删除标记,用来指示该记录是否已删除
};
struct Stu//用来存放,student的长度和内存地址
{
struct Student * pStudent;
int *num;//用来存所有的编号,在输入时用来判断是否重复
int size;//存放空间的大小
int len;//用来存放人数
bool modify;//用来标志是否修改过。
int sort;//0:表示没有排序,1按编号排序,2表示按平均成绩排序
};
void Display(struct Stu * stu);//显示所有的记录
void SortByNum(struct Stu *stu);//按编号排序输出
void SortByAve(struct Stu *stu);//按平均成绩排序输出
void Add(struct Stu *stu);//添加
void Delete(struct Stu *stu);//删除
void Modify(struct Stu *stu);//修改
void ReadFromFile(struct Stu *stu);//从文件读入
void SaveToFile(struct Stu *stu);//写入文件
void Realloc(struct Stu *stu);//增加内存空间
void Insert(struct Stu *stu);//插入
int IsValidNum(struct Stu *stu,int num);//判断输入的编号是否有效
int DeleteNum(struct Stu * stu,int num);//只是将编号简单的置为零,表示删除
#endif
在这里并没有使用数组来存放记录,而是使用了malloc,realloc来为记录分配内存空间。所以定义了个结构Stu用来存放记录的相关信息。各变量的用途说明如下:
pStudent: pStudent为struct Student *类型的变量,用来指向为记录分配的空间。
size: 为int类型,用来存放pStudent所指向的内存空间的大小。
len: 为int类型,用来存放当前有多少条记录(含已做删除标记的记录)
modify: 用来标记记录是否被修改,学生记录存在"student.dat"文件中,如果对记录做了修改,在退出时保存记录。
sort: 用来标记记录是否排序,原来没有看书上的要求,所以,排序时分别按学号和平均成绩进行了排序,但书上要求
按平成绩排序,且在插入记录时,不能打乱排序顺序,所以定义了这么一个变量。
0 表示当前记录没有排序。
1 表示当前记录按学号排序。
2 表示当前记录按平均成绩排序
在保存文件时,除了保存学生记录外,还保存了记录的排序标记,和为pStudent分配的内存空间的大小。
下面对各函数功能进行说明:
void Display(struct Stu *stu):用来显示记录,但是不排序,只是显示。
void SortByNum(struct Stu *stu):用来按编号排序记录,显示排序后的记录。置修改标记为1,在退出系统时将保存排序结果。
void SortByAve(struct Stu *stu):用来按平均成绩排序,显示排序后的记录。置修改标记为1,在退出系统时将保存排序结果。
void Add(struct Stu *stu):用来在末尾添加记,当输入的学号为0时,退出添加。
void Delete(struct Stu *stu):用来删除记录,输入要删除的学生的编号,然后循环查找该编号的学生记录,找到后显示相关信
息,并再次询问是否要删除该条记录,以免误删。
void Modify(struct Stu *stu):输入要修改的学生的编号及成绩相关信息,然后循环查找,找到后修改。
void ReadFromFile(struct Stu *stu):用来从文件中读入记录。
void SaveToFile(struct Stu *stu):用来将记录保存到文件中。
int IsValidNum(struct Stu *stu,int num):用来判断用户输入的编号是否有效。
struct Student Input(struct Stu * stu): 用来输入一条记信息,并将其返回。在Add和Insert函数对该函数进行了调用。
void Realloc(struct Stu *stu):当内存空间不足时用来重新分配内存空间。
void Insert(struct Stu *stu):插入一条记录,如果已排序,则不会打乱当前的排序,如果没有排序,则在末尾插入一条记录。
程序的界面如下:
+--------------------------------------------+
| 学生成绩管理系统 |
+--------------------------------------------+
| 1、初始化或追加一条记录 |
+--------------------------------------------+
| 2、按学号排序输出 |
| 3、按平均成绩排序输出 |
| 4、浏览记录(不排序) |
+--------------------------------------------+
| 5、插入记录 6、删除记录 |
| 7、修改记录 |
"+--------------------------------------------+
| 8、保存记录 |
| 0、退出 |
+--------------------------------------------+
请选择(0~7):
没做太周密的测试,可能还存在着错误。
下载完整程序
|