1.学生管理系统的基本功能
本系统为一个基于C语言而设计的学生管理系统,接下来是详细介绍:
1.本系统有三个等级菜单:主菜单,二级菜单,三级菜单
2.本系统的基本功能 主菜单功能:实现显示基本信息、基本信息管理、学生成绩管理、考试成绩统计(每个学生5门课程)、根据条件查询、打印结果。
第一个二级菜单:实现对文件内容中的学生信息显示,对于学生信息文件的后续追加输入、删除、修改;
第二个二级菜单:实现对学生成绩的和,求出学生各科成绩的总和,根据总分进行排名;
第三个二级菜单:实现对各科成绩求出相应的最高分、最低分、平均分;
第四个二级菜单:实现通过学号/姓名/名次来进行查找;
第五个二级菜单:实现对整体学生总的数据的打印。实现读取其他文本文件的内容并进行上述已说明的功能(第五个二级菜单功能较特殊,若要读取其他文件内容,需要将主菜单中创建一个txt文件的Studetfile函数给注释掉,然后将函数Display取消注释,然后将所有菜单中的文件路径(也就大概几个函数)改为要读取的文件路径即可对文件内容进行操作)。 3.本系统的代码文件为根据主菜单中的功能进行函数分装设计,相互之间不受太大影响,通过头文件将各个功能联系起来
2.使用前文件的介绍
1.头文件.h和具体实现文件.c的联系与使用妙处
1.将多个函数分装,便于后续代码的维护与修改
2.在.c文件中写好具体函数是如何实现的,.h文件中声明好在.c文件中写好的函数,可增加变量,仅需添加少量变量即可实现对系统功能的添加。
//Basemessage.h文件
//Basemessage.c文件
2.结构体,全局变量的定义
在Threefile.h文件中定义了结构体类型Student,并创建结构体数组stu[100];
全局变量:结构体数组stu[100]、Number(记录输入的人数)
typedef struct Student
{
char ID[10];//学号
char name[10];//姓名
char sex[10];//性别
int age;//年龄
double gaoshu;//高数
double daying;//大英
double malie;//马列
double shumo;//数模
double jiwang;//计网
double allgrade;//总分
}Student;
extern int Number;//全局变量,具体在Threefile.c文件中
extern Student stu[100];//全局变量,结构体数组,具体在Threefile.c文件中
3.文件信息的写入
在Threefile.c文件中创建函数Studentfile,创建文件并写入信息
#define _CRT_SECURE_NO_WARNINGS
#include "Display.h"
#include "Threefile.h"
#include "Testgraderank.h"
#include "Basemessage.h"
#include "Studentgrademanager.h"
#include "Find.h"
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int Number = 0;//来存放有几个学生
Student stu[100] = {0}; //创建一个结构体数组来存放学生数据
void Studentfile()//学生信息文件的创建
{
char str[80] = { 0 };
char ch = 'y';//判断是否继续输入yes/no
int i = 0;
while (ch == 'y')
{
system("cls");
printf("输入学号:");
gets(stu[i].ID);
printf("输入姓名:");
gets(stu[i].name);
printf("输入性别:");
gets(stu[i].sex);
printf("输入年龄:");
gets(str); stu[i].age = atoi(str);
printf("输入高数成绩:");
gets(str); stu[i].gaoshu = atof(str);
printf("输入大英成绩:");
gets(str); stu[i].daying = atof(str);
printf("输入马列成绩:");
gets(str); stu[i].malie = atof(str);
printf("输入数模成绩:");
gets(str); stu[i].shumo = atof(str);
printf("输入计网成绩:");
gets(str); stu[i].jiwang = atof(str);
do {
printf("是否继续y/n? ");
gets_s(str, sizeof(str)); ch = str[0];
} while (!(ch == 'y' || ch == 'n'));
stu[i].allgrade = stu[i].gaoshu + stu[i].daying + stu[i].malie + stu[i].shumo + stu[i].jiwang;
i++;
Number++; //输入的时候加了一遍
}
//Ranking();//根据总分排序
FILE* fp1 = fopen("D:\\学生管理系统存放文件\\学生信息总表.txt", "w");//将结构体数组的内容存放在文本文件中
if (fp1 == NULL)
{
printf("无法创建文件");
exit(0);
}
fprintf(fp1, "学号\t姓名\t性别\t年龄\t高数\t大英\t马列\t数模\t计网\t总分\n");//第一行表头
for (int j = 0; j < Number; j++)
{
fprintf(fp1, "%s\t%s\t%s\t%d\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", stu[j].ID, stu[j].name, stu[j].sex, stu[j].age, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].gaoshu, stu[j].allgrade);
}
fclose(fp1);
}
3.菜单的介绍
1.一级菜单
即主菜单,主要使用使用switch——case来指向下一级菜单,主要由五个函数组成,五个函数再指向其下一级菜单
#define _CRT_SECURE_NO_WARNINGS
#include "Threefile.h"
#include "Testgraderank.h"
#include "Basemessage.h"
#include "Studentgrademanager.h"
#include "Find.h"
#include "Display.h"
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main(){
Studentfile();//创建txt文件
//Display();
int i = 0;
while (1)
{
//这里是主菜单
system("cls");
printf("学生管理系统\t\t\n");
printf("____________________\t\t\n");
printf("0.退出系统\t\t\n");
printf("1.基本信息管理\t\t\n");
printf("2.学生成绩管理\t\t\n");
printf("3.考试成绩统计\t\t\n");
printf("4.查询学生信息\t\t\n");
printf("5.打印成绩报表\t\t\n");
printf("____________________\t\t\n");
loop:
printf("请选择菜单功能:请输入(0--5)\t\t\n");
scanf("%d", &i);
if (i < 0 || i > 5)
{
printf("输入错误,重新输入\t\t\n"