一学生成绩管理系统(C课程设计)


作者:
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):

没做太周密的测试,可能还存在着错误。
下载完整程序

出自:http://www.soft000.com/newsInfo.aspx?id=2479ec83-0437-4cda-a564-d6e1e1f7e5b0
上一篇:失败    下一篇:C语言课程设计——猜数字游戏


评论人: 游客