C语言学生基本信息管理系统设计过程

学生基本信息管理系统

题目

(1)任务描述
为某学校学生管理部门日常管理学生基本信息,设计一个信息管理系统。
某学校学生管理部门在新生入学时,会登记每个学生的个人基本信息,以便今后提供给教务处、学生所在系部、毕业工作指导委员会等部门使用。
(2)功能要求
① 根据自己初次入学时填写的学生信息基本情况登记表,设计本任务所需填写的的学生基本情况表格,用于学生文件管理之用。
② 设计程序,完成学生基本信息的添加。
③ 实现按学号进行学生基本信息的修改和删除。
④ 提供多种信息查询和显示:
· 按学号查询某个学生的基本信息。
· 按给定的班级号,查询该班全体学生的基本信息。
· 按给定的年级,查询该年级全体学生的基本信息。
· 按所学专业,查询全体学生的基本信息。
⑤提供多种信息统计和显示:
·按班级,统计高考课程最高、最低、平均入学成绩,以及每个人的总分
·按入校时间,统计每个专业入学人数
·按给定的班级号,统计该班生源所属省市的人数
·按给定的年级,统计不同少数民族学生人数
·按按所学专业,统计不同年级男女人数
·按给定的年级,统计各个班级中家庭收入低于该班全体同学家庭平均收入的学生人数

基本需求分析

1.基本输入
2.将信息保存在文本文件
3.允许读取文件
4.输出信息
5.查找,包括按学号、按班级,按年级,按专业
6.统计最高、最低与平均
7.统计专业人数

8.统计生源所属省份
统计年级的少数民族人数
统计专业男女人数
统计各个班级中家庭收入低于该班全体同学家庭平均收入的学生人数

拓展需求分析

设计图形化界面
设计登录界面
设计权限不同的账户

设计过程

一、信息添加模块

设计思路:
定义学生信息结构体。
编写函数用于输入学生信息。
编写函数将输入的学生信息存储到文件中。
学生基本信息如下

typedef struct Student 
{
	char Name[50];
	char Number[50];
	int  Grade ;//2021到2024
	int  Major ;//1到4
	int  Class ;//1到4
	int  Gender;
	float FamilyIncome;  // 家庭收入
	ES EntranceScore;  // 高考入学成绩
	char hometown[strsize]; //生源地
	char monity[strsize]; //民族
	struct Student  *next;
}STU;
typedef struct entrancescore
{
    float chinese;
    float math;
    float english;
    float comprehensive;
    float Sumup;
}ES;

主程序考虑使用链表存储学生
输入函数读取输入存入新学生信息,再将新学生添加到链表尾

void add_student_to_list(STU** head, STU* new_student);
void inputinf(STU** head)
{
	STU* new_student = (STU*)malloc(sizeof(STU)); // 分配新学生内存
	……//输入信息
	add_student_to_list(head, new_student);
	……
}

考虑到学号和年级、专业、班级相关联,可以设计函数对学号字符串操作得到上述信息

int extract_info_from_student_id(const char *student_id, STU *student);

返回值为0时重新输入并提示错误信息

由于后续需要统计生源地和民族信息,所以需要对输入的字符串设立标准
输入时和常量字符串一一比较,输入错误一次后提示输出所有符合要求的名称

//56个民族
const char *ethnicGroups[] = 
{
    "汉族", "蒙古族", "回族", "藏族", "维吾尔族", "苗族", "彝族", "壮族",
    "布依族", "朝鲜族", "满族", "侗族", "瑶族", "白族", "土家族", "哈尼族",
    "哈萨克族", "傣族", "黎族", "僳僳族", "佤族", "畲族", "高山族", "拉祜族",
    "水族", "东乡族", "纳西族", "景颇族", "柯尔克孜族", "土族", "达斡尔族", "仫佬族",
    "羌族", "布朗族", "撒拉族", "毛南族", "仡佬族", "锡伯族", "阿昌族", "普米族",
    "塔吉克族", "怒族", "乌孜别克族", "俄罗斯族", "鄂温克族", "德昂族", "保安族", "裕固族",
    "京族", "塔塔尔族", "独龙族", "鄂伦春族", "赫哲族", "门巴族", "珞巴族", "基诺族"
};

//所有省份
const char *provinces[] = 
{
    "北京", "天津", "河北", "山西", "内蒙古",
    "辽宁", "吉林", "黑龙江",
    "上海", "江苏", "浙江", "安徽", "福建", "江西",
    "山东", "河南", "湖北", "湖南", "广东", "广西",
    "海南", "重庆", "四川", "贵州", "云南",
    "西藏", "陕西", "甘肃", "青海", "宁夏",
    "新疆", "台湾", "香港", "澳门"
};

bool isEthnicGroup(const char *ethnicGroup);
void inputmonity(char *monity);
bool isProvinceCorrect(const char *provinces);
void inputhometown(char *hometown);

int input_scores(ES *score) ;

输出时,设计单个学生的信息输出并制表,再设计遍历所有学生链表的输出
由于性别由1,0存储,所以输出时需要特殊处理

void printstudentinfo(STU *student)
{
	……
	char* gender = student->Gender == 1 ? "男" : "女";
	printf("性别:\t\t%s", gender);
	……
}
void printallstudentsinfo(STU *head);

信息需要存在文件中
在下一次运行程序时读取格式化的信息

int write_students_to_file(const char* filename, STU* head);
STU* read_students_from_file(const char* filename);

二、信息查询模块

设计思路:
编写函数按学号查询学生信息。
编写函数按班级号查询学生信息。
编写函数按年级查询学生信息。
编写函数按专业查询学生信息。
以上需要新建一个链表,返回链表的头指针,包含所有符合条件的学生
查询时遍历原链表,按所查的信息进行查询

//查询
STU* findStudentByName(STU* head, const char* name);
STU* findStudentByNumber(STU* head, const char* number);
STU* findStudentByGrade(STU* head, int grade);
STU* findStudentByMajor(STU* head, int grade, int major);
STU* findStudentByClass(STU* head, int grade, int major, int class_number);
void systemofsearching(STU* head);

值得注意的是,在查询专业时要限定年级,查询班级时要限定年级和专业信息

三、信息修改、信息删除模块

编写函数根据学号查找学生信息。
如果找到,允许用户修改信息。
将修改后的信息保存到文件中。
编写函数根据学号查找学生信息。
如果找到,从文件中删除该学生的信息。

//学号查询修改信息,删除信息
void modifyStudentInfo(STU* head, const char* number);
void deleteStudentByNumber(STU** head, const char* number) ;

后期修改,在修改学生信息时提供修改菜单,避免重新输入所有信息,并在修改前输出学生原信息供参考

四、信息统计模块

设计思路:
编写函数按班级统计高考成绩。
编写函数按入校时间统计专业入学人数。
编写函数按班级号统计生源所属省市的人数。
编写函数按年级统计不同少数民族学生人数。
编写函数按专业统计不同年级男女人数。
编写函数按年级统计家庭收入低于班级平均收入的学生人数。
首先设计班级信息的结构

typedef struct Class
{
	int grade;
	int major;
	int class;
	STU students[Max];
	//各个课程的最高、最低、平均
	ES maxs;
	ES mins;
	ES averages;
	float averageincome;//班级平均家庭收入
	int loethana;//低于班级平均家庭收入的学生人数
}Class;

再设计函数

void StatisticEntranceScoreByClass(char *ClassID);
void StatisticEnrollmentNumberByMajor(char *EnrollmentTime);
void StatisticOriginByClassID(char *ClassID);
void StatisticNationByGrade(char *Grade);
void StatisticGenderByMajorAndGrade(char *Major, char *Grade);
void StatisticFamilyIncomeByGrade(char *Grade);

六、辅助功能模块
实现程序界面和登录功能,设计不同权限的账户
编写主菜单函数,用于用户交互。

//菜单
int adminmenu();
int stumenu();
// 界面
int Login();
int adminLogin();
int studentLogin();
void clearInputBuffer();
void delayTextPrint(const char* text, int delay);
void clearScreen();
void Head();
void STHead();

具体实现

C语言学生信息管理系统实现

posted @   lumiere_cloud  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示