C语言学籍管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Date
{ int year;//年
int month;//月
int day;//日
};
struct StuMessage
{
char stuNo[11];//学号
char name[9];//姓名
char spec[21];//专业
int grade;//年级
char sex;//性别
struct Date birthday;//出生日期
}stu[5];
int load()
{ FILE *fp;
int i;
if ((fp=fopen("results.txt","rb"))==NULL)
{
printf("文件打开错误");
return 0;
}
for (i=0;!feof(fp);i++)fread(&stu[i],sizeof(struct StuMessage),1,fp);
fclose(fp);
return(i-1);
}
void save(int n)
{
int i;
FILE *fp;
if ((fp=fopen("results.txt","wb"))==NULL)
{
printf("文件打开错误:");
}
for (i=0;i<n;i++)fwrite(&stu[i],sizeof(struct StuMessage),1,fp);
fclose(fp);
}
void SysInfo(void);
void MenuOfMain(struct StuMessage stu[]);
void Append(struct StuMessage stu[]);
void Modify(struct StuMessage stu[]);
void Delet(struct StuMessage stu[]);
void MenuOfSear(struct StuMessage stu[]);
void ListAll(struct StuMessage stu[]);
void Quit(struct StuMessage stu[]);
void SearNum(struct StuMessage stu[]);
void SearGrade(struct StuMessage stu[]);
int NumOfSear(struct StuMessage stu[],char stuNum[]); void PrintHead(void);
void Listone(struct StuMessage list);
int DelList(struct StuMessage stu[],int i);
int i;
char choose;
int length;
int main()
{
char choose;
printf("~~~~~~~~~~~~welcome~~~~~~~~~~~~\n");
printf(" 软件学院学籍管理系统\n");
printf("^-^ ^-^\n");
printf("^-^ ^-^\n");
printf("请随便输入一个非0的数进入\n");
printf("~~~~~~~~~~~~welcome~~~~~~~~~~~~\n");
choose =getchar();
MenuOfMain(stu);
}
void MenuOfMain(struct StuMessage stu[])//显示主菜单{
while(choose!='0')
{ system("cls");
printf("欢迎进入学籍管理系统主页面\n");
printf("1:录入学生信息模块\n");
printf("2:修改学生信息模块\n");
printf("3:删除学生信息模块\n");
printf("4:查询学生信息模块\n");
printf("5:输出学生信息\n");
printf("6:清屏\n");
printf("0:退出学籍管理系统\n");
printf("\n");
printf("请选择(0-5):\n");
choose=getchar();
switch(choose)
{
case'1':Append(stu); break;
case'2':Modify(stu); break;
case'3': Delet(stu); break;
case'4':MenuOfSear(stu); break;
case'5': ListAll(stu);break;
case'0': exit(0);
default:printf("请在(0-5)内选择\n");
}
}
}
void Append(struct StuMessage stu[])//录入学生记录{
char con;
length=load();
do
{ system("cls");
printf("\t\t\t\t 输入学号\n");
printf("\t\t\t\t ");
scanf("%s",&stu[i].stuNo);
printf("\t\t\t\t 输入姓名\n");
printf("\t\t\t\t ");
scanf("%s",&stu[i].name);
printf("\t\t\t\t 输入专业\n");
printf("\t\t\t\t ");
scanf("%s",&stu[i].spec);
printf("\t\t\t\t 输入年级\n");
printf("\t\t\t\t ");
scanf("%d",&stu[i].grade);
printf("\t\t\t\t 输入性别\n");
printf("\t\t\t\t ");
scanf("%s",&stu[i].sex);
printf("输入出生年月日\n");
printf("年:\n");
scanf("%d",&stu[i].birthday.year);
printf("月:\n");
scanf("%d",&stu[i].birthday.month);
printf("日:\n");
scanf("%d",&stu[i].birthday.day);
length++;
printf("如果继续请输入'Y'\n");
scanf("%c",&con);
save(length);
}
while(con=='Y');
}
void Modify(struct StuMessage stu[])//通过输入学号查询学生记录,或重新修改{
int i;
char m[11];
length=load();
do
{
printf("请输入修改学生的学号:\n");
scanf("%s",m);
for (i=0;i<length;i++)
if (!strcmp(stu[i].stuNo,m))
{
printf("请输入修改后的学生信息");
printf("学号:");
scanf("%s",stu[i].stuNo);
printf("姓名:");
scanf("%s",stu[i].name);
printf("专业:");
scanf("%s",stu[i].spec);
printf("年级:");
scanf("%d",&stu[i].grade);
printf("性别:");
scanf("%s",&stu[i].sex);
printf("出生年月日\n");
printf(" 年:");
scanf("%d",&stu[i].birthday.year);
printf(" 月:");
scanf("%d",&stu[i].birthday.month);
printf(" 日:");
scanf("%d",&stu[i].birthday.day);
printf("修改成功\n");
save(length);
} else
printf("没有找到相关记录\n");
printf("是否继续,继续请输入'Y',不继续请输入'N'\n");
choose=getchar();
choose=getchar();
}while(choose=='Y');
}
void Delet(struct StuMessage stu[])//通过输入学号查询学生记录,并可选择删除{
int i;
char m[11];
char con;
length=load();
printf("请输入要删除学生的学号");
scanf("%s",m);
for(i=0;i<=length;i++)
{
if(strcmp(m,stu[i].stuNo)==0)
{
printf("%s\t%s\t%s\t%d\t%c\t",stu[i].stuNo,stu[i].name,stu[i].spec,stu[i].grade,stu[i].sex);
printf("%d %d %d\n",stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
break;
}
}
if(i<length)
{
printf("是否删除该学生信息?(Y/N)");
scanf("%c",&con);
if(con=='y'||con=='Y')//判断是否删除
{
DelList(stu,i);
}
printf("删除成功");
}
}
void MenuOfSear(struct StuMessage stu[])//显示查询的主菜单
{
int flag = 0;
char m[11];
int i=0;
length=load();
printf("请输入学号:");
scanf("%s",m);
for(;i<length ;i++)
{ if(!strcmp(stu[i].stuNo,m))
{
PrintHead();
printf("学号%s\t",stu[i].stuNo);
printf("姓名%s\t",stu[i].name);
printf("专业%s\t",stu[i].spec);
printf("年级%d\t",stu[i].grade);
printf("性别%c\t",stu[i].sex);
printf("年%d\t",stu[i].birthday.year);
printf("月%d\t",stu[i].birthday.month);
printf("日%d\t",stu[i].birthday.day);
printf("\n");
flag = 1;
}
}
if(flag == 0)
printf("没有找到相关记录\n");
}
void ListAll(struct StuMessage stu[])//以列表的方式显示所有学生记录
{
do{void PrintHead(void);
PrintHead();
i=0;
length=load();
for (;i<length;i++)
{
printf("学号%s\t",stu[i].stuNo);
printf("姓名%s\t",stu[i].name);
printf("专业%s\t",stu[i].spec);
printf("年级%d\t",stu[i].grade);
printf("性别%c\t",stu[i].sex);
printf("年%d\t",stu[i].birthday.year);
printf("月%d\t",stu[i].birthday.month);
printf("日%d\t",stu[i].birthday.day);
printf("\n");
}
if(i>=length)
printf("选择非'0'返回主菜单\n");
choose=getchar();
choose=getchar();
}while(choose=='0');
}
void ListOne(struct StuMessage stu[],int i)
{
printf("%s\t%s\t%s\t%d\t%c\t",stu[i].stuNo,stu[i].name,stu[i].spec,stu[i].grade,stu[i].sex);
printf("%d %d %d\n",stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
}
void Quit(struct StuMessage stu[])//退出菜单系统
{
exit(0);
}
void SearNum(struct StuMessage stu[])//通过输入学号查询学生记录
{
char m[11];
length=load();
do{ system("cls");
printf("请输入查询的学号:\n");
scanf("%s",m);
for(i=0;i<length ;i++)
{if(!strcmp(stu[i].stuNo,m))
{ void PrintHead(void);
PrintHead();
printf("学号%s\t",stu[i].stuNo);
printf("姓名%s\t",stu[i].name);
printf("专业%s\t",stu[i].spec);
printf("年级%d\t",stu[i].grade);
printf("性别%c\t",stu[i].sex);
printf("年%d\t",stu[i].birthday.year);
printf("月%d\t",stu[i].birthday.month);
printf("日%d\t",stu[i].birthday.day);
printf("\n");
}
else
printf("没有找到相关记录\n");
}
printf("选择'Y'继续\n");
choose=getchar();
choose=getchar();
}while(choose=='Y');
}
void SearGrade(struct StuMessage stu[])//通过输入年级查询学生记录{
int meau();
do{ printf("请输入查询的年级:\n");
int grade;
length=load();
scanf("%d",&grade);
void PrintHead(void);
PrintHead();
int count=0;
i=0;
for(;i<length ;i++)
{
printf("学号%s\t",stu[i].stuNo);
printf("姓名%s\t",stu[i].name);
printf("专业%s\t",stu[i].spec);
printf("年级%d\t",stu[i].grade);
printf("性别%c\t",stu[i].sex);
printf("年%d\t",stu[i].birthday.year);
printf("月%d\t",stu[i].birthday.month);
printf("日%d\t",stu[i].birthday.day);
printf("\n");
count++;
i++;
}
if( count>0)
printf("共找到%d条记录\n",count);
if(count<=0)
printf("没有找到相关记录\n");
printf("按'Y'继续\n");
choose=getchar();
choose=getchar();
}while(choose=='Y');
}
int NumOfSear(struct StuMessage stu[],char stuNum[])//根据接收到的学生学号,进行查询{
int i;
length=load();
printf("输入学生学号");
scanf("%s",stuNum);
for(i=0;i<length;i++)
{
if(strcmp(stuNum,stu[i].stuNo)==0)
break;
}
if(i<length)
return i;
else return -1;
}
void PrintHead(void) //显示表头
{
printf("学号:\t 姓名:\t 专业:\t 年级:\t 性别:\t 年:\t 月:\t 日:\t\n");
}
int DelList(struct StuMessage stu[],int i)//如果数组中存在下标为i的记录,删除该记录返回{ int j;
if(i<length)
{for(j=i+1;j<length;j++)
stu[j-1]=stu[j];
length--;
printf("删除成功");
return 1;
}
else
return 0;
}。