本文实例为大家分享了C语言实现班级学生管理系统的具体代码,供大家参考,具体内容如下
下面是根据班级,这个人数较少的单位设计的学籍管理系统,录入时,要求班内序号由1开始 按顺序录入,其中主要用到了 结构体数组,文件处理,循环语句,选择语句等方面的知识
在设计中遇到一个问题就是:不知道怎样修改已经保存在文件中的某一个指定学生的信息,后来在询问学长之后才了解到 ,可以: 先把文件中的数据全部读入结构体数组中,再修改指定序号的数组元素,然后再用“wt”的方式写进原文件,这样就可以删除文件里的原内容,再写进新内容
下面是源代码,在Dev-C++ 条件下进行编译
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
int count1=0;
int count2=0;
int count3=0;
void class_print();
void men1_student();
void men2_student();
void men3_student();
void men4_student();
void input_student();
void input_grade();
void input_reward();
void input_finance();
void report_finance();
void seek_student();
void seek_grade();
void seek_reward();
void change_student();
void change_grade();
void change_reward();
int now1_student();
int now2_student();
int now3_student();
struct date
{
int year;
int month;
int day;
};
struct student
{
char number[2];
char name[10];
char sex[4];
char tel[15];
char id[20];
char study[10];
};
struct grade
{
char number[2];
char name[10];
char math[4];
char English[4];
char Cprogram[4];
char sumtest[4];
};
struct reward
{
char number[2];
char name[10];
struct date time;
char rewarding[80];
};
struct finance
{
char thing[20];
char type[8];
struct date time2;
int i;
};
struct student m_stu[50];
struct grade g_stu[50];
struct reward r_stu[50];
struct finance f_class;
struct grade t_change;
main()
{
int choice=-1; //一级菜单
while(choice!=0)
{
printf("\n");
printf("\t\t\t\t\t\t**"); class_print(); printf("**\n");
printf("\t\t\t\t\t\t****************************\n");
printf("\t\t\t\t\t\t** 班级学生学籍管理系统 **\n");
printf("\t\t\t\t\t\t** 1.户籍管理系统 **\n");
printf("\t\t\t\t\t\t** 2.成绩管理系统 **\n");
printf("\t\t\t\t\t\t** 3.奖惩管理系统 **\n");
printf("\t\t\t\t\t\t** 4.财务管理系统 **\n");
printf("\t\t\t\t\t\t** 0.退 出 **\n");
printf("\t\t\t\t\t\t请选择");
scanf("%d",&choice);
switch(choice)
{
case 1:
men1_student();
break;
case 2:
men2_student();
break;
case 3:
men3_student();
break;
case 4:
men4_student();
break;
case 0:
printf("返回上一级");
break;
default :
break;
}
}
}
void men1_student() //二级菜单(学生户籍管理)
{
int choice=-1;
while(choice!=0)
{
printf("\n");
printf("\t\t\t\t\t\t****************************\n");
printf("\t\t\t\t\t\t**"); class_print(); printf("**\n");
printf("\t\t\t\t\t\t** 班级学生户籍信息管理 **\n");
printf("\t\t\t\t\t\t** 户籍信息已录入人数:");now1_student();printf(" **\n");
printf("\t\t\t\t\t\t** 1.户籍录入系统 **\n");
printf("\t\t\t\t\t\t** 2.户籍修改系统 **\n");
printf("\t\t\t\t\t\t** 3.户籍查询系统 **\n");
printf("\t\t\t\t\t\t** 0.返 回 **\n");
printf("\t\t\t\t\t\t请选择");
scanf("%d",&choice);
switch(choice)
{
case 1:
input_student();
break;
case 2:
change_student();
break;
case 3:
seek_student();
break;
case 0:
printf("返回上一级");
break;
default :
break;
}
getch();
}
}
void input_student() // 户籍录入函数 录入信息保存至D盘根目录下information1.txt文件下
{
int j;
printf("学生户籍信息录入");
printf("\n班内序号: ");
scanf("%s",&m_stu[count1].number);
printf("\n姓名: ");
gets(m_stu[count1].name);
gets(m_stu[count1].name);
printf("\n性别: ");
scanf("%s",&m_stu[count1].sex);
printf("\n电话号码: ");
scanf("%s",&m_stu[count1].tel);
printf("\n身份证号: ");
scanf("%s",&m_stu[count1].id);
printf("\n学号: ");
scanf("%s",&m_stu[count1].study);
printf("是否保存该学生信息?1-保存 2-放弃");
scanf("%d",&j);
if(j==1)
{
FILE *info; //保存至本地文件
info=fopen("d:\\information1.txt","at+");
fwrite(&m_stu[count1],sizeof(struct student),1,info);
fclose(info);
printf("信息已保存至D:\\information1.tex 文件下,按任意键继续");
count1++;
}
else printf("放弃保存,按任意键继续");
}
void seek_student() //查询户籍信息函数
{
FILE *info;
info=fopen("d:\\information1.txt","rt");
int i;
printf("请输入该学生班内序号");
scanf("%d",&i);
if(i<1||i>50) printf("抱歉,该学生信息不存在");
else
{
rewind(info);
fseek(info,sizeof(struct student)*(i-1),0);
fread(&m_stu[i-1],sizeof(struct student),1,info);
printf("\n\n序号 姓名 性别 电话号码\t 身份证号\t\t学号\t");
printf("\n\n%d %s %s %s %s %s",i,m_stu[i-1].name,m_stu[i-1].sex,m_stu[i-1].tel,m_stu[i-1].id,m_stu[i-1].study);
}
}
void change_student() //修改户籍信息
{
int i=0,j,k,f;char h[100000];
FILE *info;
info=fopen("d:\\information1.txt","rt");
printf("\n\t请输入要修改户籍信息的学生班内序号");
scanf("%d",&j);
if(j<1||j>50) printf("抱歉,该学生信息不存在");
else
{
rewind(info);
while(fgets(h,sizeof(struct student),info)!=NULL)
{
fseek(info,sizeof(struct student)*i,0);
fread(&m_stu[i],sizeof(struct student),1,info);
i++;
}
}
fclose(info);
printf("\n该学生目前户籍信息为\n:");
printf("\n\n序号 姓名 性别 电话号码\t 身份证号\t\t学号\t");
printf("\n\n%d %s %s %s %s %s",j,m_stu[j-1].name,m_stu[j-1].sex,m_stu[j-1].tel,m_stu[j-1].id,m_stu[j-1].study);
printf("确定修改此学生信息?1- 修改 2- 返回");
scanf("%d",&k);
if(k==1)
{
printf("\n姓名: ");
gets(m_stu[j-1].name);
gets(m_stu[j-1].name);
printf("\n性别: ");
scanf("%s",&m_stu[j-1].sex);
printf("\n电话号码: ");
scanf("%s",&m_stu[j-1].tel);
printf("\n身份证号: ");
scanf("%s",&m_stu[j-1].id);
printf("\n学号: ");
scanf("%s",&m_stu[j-1].study);
}
else return;
info=fopen("d:\\information1.txt","wt");
for(f=0;f<i;f++)
{
fseek(info,sizeof(struct student)*f,0);
fwrite(&m_stu[f],sizeof(struct student),1,info);
}
fclose(info);
printf("修改成功!");
}
void men2_student() //二级菜单(学生成绩管理)
{
int choice=-1;
while(choice!=0)
{
printf("\n\t\t\t\t\t\t****************************\n");
printf("\t\t\t\t\t\t**"); class_print(); printf("**\n");
printf("\t\t\t\t\t\t** 班级学生成绩信息管理 **\n");
printf("\t\t\t\t\t\t** 成绩信息已录入人数:");now2_student();printf(" **\n");
printf("\t\t\t\t\t\t** 1.成绩录入系统 **\n");
printf("\t\t\t\t\t\t** 2.成绩修改系统 **\n");
printf("\t\t\t\t\t\t** 3.成绩查询系统 **\n");
printf("\t\t\t\t\t\t** 4.综测排名系统 **\n");
printf("\t\t\t\t\t\t** 0.返 回 **\n");
printf("\t\t\t\t\t\t请选择");
scanf("%d",&choice);
switch(choice)
{
case 1:input_grade();
break;
case 2:change_grade();
break;
case 3:seek_grade();
break;
case 4:printf("功能正在研发中,敬请期待...");
break;
default:
break;
}
getch();
}
}
void input_grade() // 成绩录入函数 ,录入信息保存至 D盘根目录下information2.txt文件下
{
int j;
printf("学生成绩信息录入");
printf("\n班内序号");
scanf("%s",&g_stu[count2].number);
printf("\n姓名: ");
gets(g_stu[count2].name);
gets(g_stu[count2].name);
printf("\n高数: ");
scanf("%s",&g_stu[count2].math);
printf("\n英语:");
scanf("%s",&g_stu[count2].English);
printf("\nC语言:");
scanf("%s",&g_stu[count2].Cprogram);
printf("\n综测:");
scanf("%s",&g_stu[count2].sumtest);
printf("是否保存该学生信息?1-保存 2-放弃");
scanf("%d",&j);
if(j==1)
{
FILE *info2; //保存至本地文件
info2=fopen("d:\\information2.txt","at+");
fwrite(&g_stu[count2],sizeof(struct grade),1,info2);
fclose(info2);
printf("信息已保存至D:\\information.tex2 文件下,按任意键继续");
count2++;
}
else printf("放弃保存,按任意键继续");
}
void seek_grade() //查询成绩信息函数
{
FILE *info2;
info2=fopen("d:\\information2.txt","rt");
int i;
printf("\n\t请输入该学生班内序号");
scanf("%d",&i);
if(i<1||i>50) printf("\n抱歉,该学生信息不存在");
else
{
rewind(info2);
fseek(info2,sizeof(struct grade)*(i-1),0);
fread(&g_stu[i-1],sizeof(struct grade),1,info2);
printf("\n\n序号 姓名 高数 英语 C语言 综测");
printf("\n\n%d %s %s %s %s %s",i,g_stu[i-1].name,g_stu[i-1].math,g_stu[i-1].English,g_stu[i-1].Cprogram,g_stu[i-1].sumtest);
}
}
void change_grade() //修改成绩信息
{
int i=0,j,k,f;char h[100000];
FILE *info;
info=fopen("d:\\information2.txt","rt");
printf("\n\t请输入要修改成绩信息的学生班内序号");
scanf("%d",&j);
if(j<1||j>50) printf("\n抱歉,该学生信息不存在");
else
{
rewind(info);
while(fgets(h,sizeof(struct grade),info)!=NULL)
{
fseek(info,sizeof(struct grade)*i,0);
fread(&g_stu[i],sizeof(struct grade),1,info);
i++;
}
}
fclose(info);
printf("\n该学生目前成绩信息为\n:");
printf("\n\n序号 姓名 高数 英语 C语言 综测");
printf("\n\n%d %s %s %s %s %s",j,g_stu[j-1].name,g_stu[j-1].math,g_stu[j-1].English,g_stu[j-1].Cprogram,g_stu[j-1].sumtest);
printf("\n\t确定修改此学生信息?1- 修改 2- 返回");
scanf("%d",&k);
if(k==1)
{
printf("\n姓名: ");
gets(g_stu[j-1].name);
gets(g_stu[j-1].name);
printf("\n高数: ");
scanf("%s",&g_stu[j-1].math);
printf("\n英语: ");
scanf("%s",&g_stu[j-1].English);
printf("\nC语言: ");
scanf("%s",&g_stu[j-1].Cprogram);
printf("\n综测: ");
scanf("%s",&g_stu[j-1].sumtest);
}
else return;
info=fopen("d:\\information2.txt","wt");
if(info==NULL)
{
printf("不能打开此文件,按任意键继续");
getch();
}
for(f=0;f<i;f++)
{
fseek(info,sizeof(struct grade)*f,0);
fwrite(&g_stu[f],sizeof(struct grade),1,info);
}
fclose(info);
printf("修改成功!");
}
void men3_student() //二级菜单(学生奖惩管理)
{
int choice=-1;
while(choice!=0)
{
printf("\n");
printf("\t\t\t\t\t\t****************************\n");
printf("\t\t\t\t\t\t**"); class_print(); printf("**\n");
printf("\t\t\t\t\t\t** 班级学生奖惩信息管理 **\n");
printf("\t\t\t\t\t\t** 奖惩信息已录入人数:");now3_student();printf(" **\n");
printf("\t\t\t\t\t\t** 1.奖惩录入系统 **\n");
printf("\t\t\t\t\t\t** 2.奖惩修改系统 **\n");
printf("\t\t\t\t\t\t** 3.奖惩查询系统 **\n");
printf("\t\t\t\t\t\t** 0.返 回 **\n");
printf("\t\t\t\t请选择");
scanf("%d",&choice);
switch(choice)
{
case 1:
input_reward();
break;
case 2:
change_reward();
break;
case 3:
seek_reward();
break;
case 0:
printf("返回上一级");
break;
default :
break;
}
getch();
}
}
void input_reward() // 奖惩录入函数 录入信息保存至D盘根目录下information3.txt文件下
{
int j;
printf("学生奖惩信息录入");
printf("\n班内序号: ");
scanf("%s",&r_stu[count3].number);
printf("\n姓名: ");
gets(r_stu[count3].name);
gets(r_stu[count3].name);
printf("\n奖惩时间: ");
scanf("%d.%d.%d",&r_stu[count3].time.year,&r_stu[count3].time.month,&r_stu[count3].time.day);
printf("\n具体事件: ");
gets(r_stu[count3].rewarding);
gets(r_stu[count3].rewarding);
printf("\n是否保存该学生信息?1-保存 2-放弃");
scanf("%d",&j);
if(j==1)
{
FILE *info; //保存至本地文件
info=fopen("d:\\information3.txt","at+");
fwrite(&r_stu[count3],sizeof(struct reward),1,info);
fclose(info);
printf("\n信息已保存至D:\\information3.tex 文件下,按任意键继续");
count3++;
}
else printf("放弃保存,按任意键继续");
}
void seek_reward() //查询奖惩信息函数 根据学生班级序号
{
FILE *info;
info=fopen("d:\\information3.txt","rt");
int i;
printf("\n\t请输入该学生班内序号");
scanf("%d",&i);
if(i<1||i>50) printf("\n抱歉,该学生信息不存在");
else
{
rewind(info);
fseek(info,sizeof(struct reward)*(i-1),0);
fread(&r_stu[i-1],sizeof(struct reward),1,info);
printf("\n\n序号 姓名 奖惩时间 具体事件\t\t");
printf("\n\n%d %s %d.%d.%d %s ",i,r_stu[i-1].name,r_stu[i-1].time.year,
r_stu[i-1].time.month,
r_stu[i-1].time.day, r_stu[i-1].rewarding);
}
}
void change_reward() //修改奖惩信息
{
int i=0,j,k,f;char h[100000];
FILE *info;
info=fopen("d:\\information3.txt","rt");
printf("\n\t请输入要修改奖惩信息的学生班内序号");
scanf("%d",&j);
if(j<1||j>50) printf("\n抱歉,该学生信息不存在");
else
{
rewind(info);
while(fgets(h,sizeof(struct reward),info)!=NULL)
{
fseek(info,sizeof(struct reward)*i,0);
fread(&r_stu[i],sizeof(struct reward),1,info);
i++;
}
}
fclose(info);
printf("\n该学生目前奖惩信息为\n:");
printf("\n\n序号 姓名 奖惩时间 具体事件");
printf("\n\n%d %s %d.%d.%d %s ",j,r_stu[j-1].name,r_stu[j-1].time.year,
r_stu[j-1].time.month,
r_stu[j-1].time.day ,r_stu[j-1].rewarding);
printf("\n\t确定修改此学生信息?1- 修改 2- 返回");
scanf("%d",&k);
if(k==1)
{
printf("\n姓名: ");
gets(r_stu[j-1].name);
gets(r_stu[j-1].name);
printf("\n奖惩时间: ");
scanf("%d.%d.%d",&r_stu[j-1].time.year,&r_stu[j-1].time.month,&r_stu[j-1].time.day);
printf("\n具体事件: ");
scanf("%s",&r_stu[j-1].rewarding);
}
else return;
info=fopen("d:\\information3.txt","wt");
for(f=0;f<i;f++)
{
fseek(info,sizeof(struct reward)*f,0);
fwrite(&r_stu[f],sizeof(struct reward),1,info);
}
fclose(info);
printf("修改成功!");
}
int now1_student() //录入户籍信息学生数目 在菜单中 显示 已经录入学生人数
{
int i=1;
char j[100000];
FILE *info;
info=fopen("D:\\information1.txt","rt");
rewind(info);
while(fgets(j,sizeof(struct student),info)!=NULL)
{
fseek(info,sizeof(struct student)*i,0);
i++;
}
fclose(info);
printf("%d",i-1);
}
int now2_student() //录入成绩信息学生数目 在菜单中 显示 已经录入学生人数
{
int i=1;
char j[100000];
FILE *info;
info=fopen("D:\\information2.txt","rt");
rewind(info);
while(fgets(j,sizeof(struct grade),info)!=NULL)
{
fseek(info,sizeof(struct grade)*i,0);
i++;
}
fclose(info);
printf("%d",i-1);
}
int now3_student() //录入奖惩信息学生数目 在菜单中 显示 已经录入学生人数
{
int i=1;
char j[100000];
FILE *info;
info=fopen("D:\\information3.txt","rt");
rewind(info);
while(fgets(j,sizeof(struct reward),info)!=NULL)
{
fseek(info,sizeof(struct reward)*i,0);
i++;
}
fclose(info);
printf("%d",i-1);
}
void class_print() // 录入专业班级信息,并保存至D盘根目录下information0.txt文件下
{
char major[20],class_number[4];
FILE *info;
info=fopen("d:\\information0.txt","rt");
if(info==NULL)
{
info=fopen("d:\\information0.txt","wt");
printf("\n请输入专业 :");
scanf("%s",&major);
printf("\n请输入班级 :");
scanf("%s",&class_number);
fwrite(major,sizeof(major),1,info);
fwrite(class_number,sizeof(class_number),1,info);
printf("\n\t已保存专业班级信息!");
fclose(info);
info=fopen("d:\\information0.txt","rt");
fread(&major,sizeof(major),1,info);
fread(&class_number,sizeof(class_number),1,info);
printf("%s",major);printf("%s班",class_number);
}
else
{
fread(&major,sizeof(major),1,info);
fread(&class_number,sizeof(class_number),1,info);
printf("%s",major);printf("%s班",class_number);
fclose(info);
}
}
void men4_student() //二级菜单(班级财务管理)
{
int choice=-1;
while(choice!=0)
{
printf("\n");
printf("\t\t\t\t\t\t****************************\n");
printf("\t\t\t\t\t********财务信息不可修改,请谨慎录入!******\n");
printf("\t\t\t\t\t\t** 班级学生财务信息管理 **\n");
printf("\t\t\t\t\t\t** 1.财务录入系统 **\n");
printf("\t\t\t\t\t\t** 2.财务报表系统 **\n");
printf("\t\t\t\t\t\t** 0.返 回 **\n");
printf("\t\t\t\t\t\t请选择");
scanf("%d",&choice);
switch(choice)
{
case 1:
input_finance();
break;
case 2:
report_finance();
break;
case 3:
case 0:
printf("返回上一级");
break;
default :
break;
}
getch();
}
}
void input_finance() // 财务录入函数 ,录入后信息保存到D盘根目录下 information4.txt文件中
{
int j;
printf("班级财务信息录入");
printf("\n收支时间: ");
scanf("%d.%d.%d",&f_class.time2.year,&f_class.time2.month,&f_class.time2.day );
printf("\n具体事件: ");
gets(f_class.thing);
gets(f_class.thing);
printf("\n财务类型(收入或开支): ");
scanf("%s",&f_class.type);
printf("\n流动金额(收入为正开支为负): ");
scanf("%d",&f_class.i);
printf("\n是否保存该财务信息?1-保存 2-放弃");
scanf("%d",&j);
if(j==1)
{
FILE *info; //保存至本地文件
info=fopen("d:\\information4.txt","at+");
fwrite(&f_class,sizeof(struct finance),1,info);
fclose(info);
printf("\n信息已保存至D:\\information4.txt 文件下,按任意键继续");
}
else printf("放弃保存,按任意键继续");
}
void report_finance() // 财务信息报表
{
char h[100000];int sum=0,i=0;
printf("\n收支时间 具体事件\t财务类型 流动金额\n");
FILE *info;
info=fopen("d:\\information4.txt","rt");
while(fgets(h,sizeof(struct finance),info)!=NULL)
{
fseek(info,sizeof(struct finance)*i,0);
fread(&f_class,sizeof(struct finance),1,info);i++;
printf("\n%d.%d.%d %s %s %d\n",f_class.time2.year,
f_class.time2.month,
f_class.time2.day, f_class.thing,f_class.type,f_class.i);
sum=sum+f_class.i ;
}
printf("\n\t\t班费余额:%d元",sum);
}