程序设计基础(C)大作业——学籍管理系统(1)

版权声明:本文为Cantjie原创文章,转载需获得博主许可 https://blog.csdn.net/cantjie/article/details/70766848

“第二版学籍管理系统”软件项目的功能需求:有一个整体的系统界面菜单,用户可以在菜单上选择如下子功能:
[1]增加一个学生数据;
[2]修改一个学生数据,能以姓名或者学号,找到要修改的学生;
[3]删除一个学生数据,能以姓名或者学号,找到要删除的学生;
[4]对学生数据进行排序,按照班级号从小到大,同一班级内按照姓名拼音的先后顺序排序;
[5]输出全部学生数据;
[6]进行成绩分析,输出结果;
说明:成绩分析要求计算成绩的方差和标准差。若三个学生的总成绩分别为x1,x2,x3,其均值为x,则方差计算公式如下: ((x1-x)(x1-x)+(x2-x)(x2-x)+(x3-x)*(x3-x))/3, 标准差是方差的平方根。
[7]系统退出。
【老师竟然改需求了!成绩分析还要输出均值,为此,临时添加一个全局变量m_ave】

鉴于之前的想法还有很多不足,也没有及时更新,重新按顺序一点一点写出来。
首先是把数据结构和函数与要实现的功能建立联系。
在final.h里声明出结构体和主要的函数
各种功能见代码中的注释。

final.h

#include<stdio.h>
#include<stdlib.h> 
#include<malloc.h>
#include<string.h>
#define LEN sizeof(stu)
#define _FILENAME_ "data.txt"
//链表的第一项通常不用来储存信息
struct Student{
    int id;
    int cls;
    char name[20];
    float score[3];
    float sum;

    struct Student *next;
};

typedef struct Student stu;
/*全局变量声明部分*/
int m_n;//全局变量n,学生个数,即不包括头的节点个数
stu *m_head;
int m_ave;
/*函数声明部分*/

stu *create();
stu *sort(stu *head);

/**计算方差,应包含三种格式:
*1、输入0,返回所有学生方差;
*2、输入1,输入cls,返回该班学生的方差;
*3、输入2,然后输入id范围,返回方差;
*by cantjie
*/
float varianceStu(stu *head);


/**
*每次删除或更新等操作后,要把内存里的数据写入文件,flag表示模式,为1表示追加,为0表示重写
*put data in memory into _FILENAME_ in harddisk,used every time update or delete the data
*by cantjie
*/
void saveStu(stu *head,int flag);


/**
*把文件里的数据读取到内存中
*by cantjie
*/
stu *readStu();

/**
*显示学生信息
*by cantjie
*/
void showStu(stu *p);


/**
*显示学生信息前显示表头
*by cantjie
*/
void showTitle();

/**
*删除学生信息
*传入的参数为要删除的学生的前一个学生的指针
*by cantjie
*/
void deleteStu(stu *p);


/**
*更新、修改学生信息
*传入的参数为要更改的学生的指针
*by cantjie
*/
void updateStu(stu *p);

/**
*检查id 是否重复,如果id重复,返回1。不重复返回0
*by cantjie
*/
int validate(stu *head, int id);

/**
*通过学号或者姓名查找学生,用在以上函数中
*返回要查找的学生的前一个struct的指针
*by cantjie
*/
stu *findStu(stu *head, int id, char *name);

/**
*用在main函数,输入功能后进入此函数
*/
void controller(int flag);

/**
*let user to choose function,after printing function list
*by cantjie
*/
void chooseFunction();

猜你喜欢

转载自blog.csdn.net/cantjie/article/details/70766848
今日推荐