课程设计学生学籍管理系统源代码.docx
《课程设计学生学籍管理系统源代码.docx》由会员分享,可在线阅读,更多相关《课程设计学生学籍管理系统源代码.docx(20页珍藏版)》请在冰豆网上搜索。
![课程设计学生学籍管理系统源代码.docx](https://file1.bdocx.com/fileroot1/2022-12/12/7e4e3b6c-7d54-4171-aa4e-d0499b85f6a6/7e4e3b6c-7d54-4171-aa4e-d0499b85f6a61.gif)
课程设计学生学籍管理系统源代码
#include"stdio.h"
#include"conio.h"
#include"stdlib.h"
#include"string.h"
#defineN1000//N为可输入的学生总人数,可根据需要更改
#defineM2//M为宏定义的(在创建密码函数中)可建立的登陆用户个数,可更改
structstudent//定义学生信息结构体数组
{
charnum[9];//学号
charname[20];//姓名
chardepar[15];//院系
charzhuanye[15];//专业
charclasses[5];//班级
charage[3];//年龄
charsex[4];//性别
charnation[5];//民族
charbirth[9];//出生日期
charadd[10];//籍贯
};
structcode//定义密码结构体数组
{
charname[20];
charcode[7];
}co[M],s0;
//确认是否新创建密码文件模块
intcode()
{
FILE*fp;
if((fp=fopen("学生学籍管理系统__code.txt","rt"))==NULL)
{
printf("密码文件不存在,请输入新的用户名及密码:
\n");
//若不存在此密码文件,则提示用户创建密码
printf("请输入任意键继续!
");
getch();
system("cls");
return1;//无密码文件返回1
}
else
return0;//已有密码文件返回0
}
//新创建初始密码
voidcode_input()
{
FILE*fp;
inti;
if((fp=fopen("学生学籍管理系统__code.txt","wt"))==NULL);//当建立密码文件成功时,进入for循环
for(i=0;i{
printf("请录入第%d个用户名:
",i+1);//创建不同的用户名及密码
scanf("%s",co[i].name);
printf("请录入第%d个密码(最多6位):
",i+1);
scanf("%s",co[i].code);
printf("\n");
fwrite(&co[i],sizeof(structcode),1,fp);//将密码保存进文件中
}
fclose(fp);
getch();
system("cls");
}
//用户登陆验证模块
intenter(charname1[20],charcode1[6])
{
FILE*fp;
intflog=0;
inti;
fp=fopen("学生学籍管理系统__code.txt","rt");//打开存放密码的文件
for(i=0;i{
fread(&co[i],sizeof(structcode),1,fp);//读密码文件
if((strcmp(name1,co[i].name)==0))//如果输入的用户名与已存在用户名相同,再比较密码是否相同,否则进行下一个用户名的比较
{
if((strcmp(code1,co[i].code)==0))//比较此用户名下的密码是否一致
return1;//验证成功后回到主函数
}
}
if(i>=M)//当比较完成后,都没有符合条件的用户名与密码,则直接跳出程序
printf("******您无权进入此管理系统!
!
!
*****");
fclose(fp);
getch();
exit
(1);
}
//从文件读入数据
intread_file(structstudentstu[])
{
FILE*sp;
inti=0;
system("cls");
if((sp=fopen("学生学籍管理系统__学生信息.txt","rt"))==NULL)//读文件,若文件不存在,则需要创建一个新的文件(文件创建在save_file函数中完成)
{
printf("\n学生学籍管理系统__学生信息文件不存在,请创建!
\n");
getch();
system("cls");
return0;
}
while((fread(&stu[i],sizeof(structstudent),1,sp))==1)//判断文件是否处在结束位置
{
if(stu[i].num==0)//若文件内容为空,则跳出循环
break;
else//若文件内容不为空,i自加1。
i++;//i为文件内结构体数组的数量
}
fclose(sp);
returni;//返回i值,代表文件中学生的人数
}
//保存学生信息(保存在文件中)
voidsave_file(structstudentstu[],intsum)
{
FILE*sp;
inti;
if((sp=fopen("学生学籍管理系统__学生信息.txt","wb"))==NULL)//若不存在此TXT文档,则创建;
{
printf("读文件错误!
\n");//创建不成功,返回menu函数;
return;
}
for(i=0;iif(fwrite(&stu[i],sizeof(structstudent),1,sp)!
=1)//保存文件,sum为现有总学生人数,若未保存成功,提示"写文件错误!
";
printf("写文件错误!
\n");
fclose(sp);
return;
}
//创建并录入信息
intfound(structstudentstu[])
{
inti=0,x;
system("cls");
printf("请输入要录入的学生的个数:
\n");
scanf("%d",&x);
if(x==0)
return0;
do//输入信息
{
printf("\n请录入第%d个学生的信息:
\n",i+1);
printf("请录入学号:
");
scanf("%s",stu[i].num);
printf("\n请录入姓名:
");
scanf("%s",stu[i].name);
printf("\n请录入院系:
");
scanf("%s",stu[i].depar);
printf("\n请录入专业:
");
scanf("%s",stu[i].zhuanye);
printf("\n请录入班级:
");
scanf("%s",stu[i].classes);
printf("\n请录入性别:
");
scanf("%s",stu[i].sex);
printf("\n请录入年龄:
");
scanf("%s",stu[i].age);
printf("\n请录入出生日期(yyyymmdd):
");
scanf("%s",stu[i].birth);
printf("\n请录入民族:
");
scanf("%s",stu[i].nation);
printf("\n请录入籍贯:
");
scanf("%s",stu[i].add);
i++;
system("cls");
}while(i=x(用户要求创建学生的人数)时,跳出输入信息的for循环;
save_file(stu,x);//保存学生信息致文件
printf("录入完毕,请按任意键返回");
getch();
returni;//返回创建学生的人数
}
//修改学生信息
voidmodify(structstudentstu[],intsum)
{
inti,item,a=1;//i控制数组下标,item控制子菜单的选择
chars1[8];
FILE*sp;
system("cls");
read_file(stu,sum);//读函数
do
{
printf("\n\n\n请输入你要修改的学号:
\n");
scanf("%s",s1);//要修改的学生学号
for(i=0;i{
if(strcmp(stu[i].num,s1)==0)//若找到该生,输出该生的信息
{
printf("该学生学号:
%s\n",stu[i].num);
printf("该学生姓名:
%s\n",stu[i].name);
printf("该学生院系:
%s\n",stu[i].depar);
printf("该学生专业:
%s\n",stu[i].zhuanye);
printf("该学生班级:
%s\n",stu[i].classes);
printf("该学生性别:
%s\n",stu[i].sex);
printf("该学生年龄:
%s\n",stu[i].age);
printf("该学生出生日期:
%s\n",stu[i].birth);
printf("该学生民族:
%s\n",stu[i].nation);
printf("该学生籍贯:
%s\n",stu[i].add);
a=0;//找到该生,a=0;
break;//出for循环
}
}
if(a==1)//若没有找到该生,a=1,输出提示语句
printf("\n\n该学号不存在!
请重新输入学号:
\n");
}while(a);//当a=0,即没有找到该生,则继续循环重新输入学生学号
printf("\t****************\n");
printf("\t你选择你要修改的选项:
\n");
printf("\t1.*修改姓名\n");
printf("\t2.*修改年龄\n");
printf("\t3.*修改性别\n");
printf("\t4.*修改出生日期\n");
printf("\t5.*修改籍贯\n");
printf("\t6.*修改院系名称\n");
printf("\t7.*修改专业名称\n");
printf("\t8.*修改班级\n");
printf("\t9.*修改民族\n");
printf("\t0.*退出菜单\n");
printf("\t****************\n");
while
(1)
{
printf("\n\t请选择你要进行的操作:
");
scanf("%d",&item);///item控制子菜单的选择
switch(item)
{
case1:
//修改姓名
printf("\t请输入新的姓名:
");
scanf("%s",stu[i].name);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case2:
//修改年龄
printf("\t请输入新的年龄:
");
scanf("%s",stu[i].age);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case3:
//修改性别
printf("\t请输入新的性别:
");
scanf("%s",stu[i].sex);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case4:
//修改出生日期
printf("\t请输入新的出生年月(yyyy.mm):
");
scanf("%s",stu[i].birth);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case5:
//修改籍贯
printf("\t请输入新的籍贯:
");
scanf("%s",stu[i].add);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case6:
//修改院系
printf("\t请输入新的院系:
");
scanf("%s",stu[i].depar);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case7:
//修改专业
printf("\t请输入新的专业名称:
");
scanf("%s",stu[i].zhuanye);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case8:
//修改班级
printf("\t请输入新的班级:
");
scanf("%s",stu[i].classes);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case9:
//修改民族
printf("\t请输入新的民族名称:
");
scanf("%s",stu[i].nation);
printf("\n\n\n修改成功!
\n");
save_file(stu,sum);
break;
case0:
return;//不修改,退出
default:
printf("\t请在0到9之间选择:
");//若输入的值不在0~9,则提示
}
}
}
//查询学生信息
voidseek(structstudentstu[],intsum)
{
inti,item,flag;//i控制数组下标,item控制子菜单的选择,flag为判断条件
chars1[11];
system("cls");
while
(1)
{
system("cls");
printf("\n\n\t\t------------------\n");
printf("\t\t1.按学号查询\n");
printf("\t\t2.按姓名查询\n");
printf("\t\t3.退出本菜单\n");
printf("\t\t------------------\n");
printf("\t\t请选择子菜单编号:
");
scanf("%d",&item);//选择子菜单
flag=0;
switch(item)
{
case1:
//按学号进行查找
printf("\t\t请输入要查询的学生的学号:
");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].num,s1)==0)//判断学号是否存在
{//输出
flag=1;
printf("该学生学号:
%s\n",stu[i].num);
printf("该学生姓名:
%s\n",stu[i].name);
printf("该学生院系:
%s\n",stu[i].depar);
printf("该学生专业:
%s\n",stu[i].zhuanye);
printf("该学生班级:
%s\n",stu[i].classes);
printf("该学生性别:
%s\n",stu[i].sex);
printf("该学生年龄:
%s\n",stu[i].age);
printf("该学生出生日期:
%s\n",stu[i].birth);
printf("该学生民族:
%s\n",stu[i].nation);
printf("该学生籍贯:
%s\n",stu[i].add);
getch();
}
if(flag==0)//当上一个if条件不成立,flag=0,学生学号不存在,输出提示;
printf("\n\n\n\t\t该学号不存在!
\n");
getch();break;
case2:
//按姓名进行查找
printf("\n\n\t\t请输入要查询的学生的姓名:
");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].name,s1)==0)//判断姓名是否存在
{//输出
flag=1;
printf("该学生学号:
%s\n",stu[i].num);
printf("该学生姓名:
%s\n",stu[i].name);
printf("该学生院系:
%s\n",stu[i].depar);
printf("该学生专业:
%s\n",stu[i].zhuanye);
printf("该学生班级:
%s\n",stu[i].classes);
printf("该学生性别:
%s\n",stu[i].sex);
printf("该学生年龄:
%s\n",stu[i].age);
printf("该学生出生日期:
%s\n",stu[i].birth);
printf("该学生民族:
%s\n",stu[i].nation);
printf("该学生籍贯:
%s\n",stu[i].add);
getch();
}
if(flag==0)//当上一个if条件不成立,flag=0,学生姓名不存在,输出提示;
printf("\n\n\n\t\t该姓名不存在!
\n");
getch();break;
case3:
system("cls");return;
default:
printf("\n\n\n\t\t请在1-3之间选择\n");//若输入的值不在1~3,则提示
getch();
}
}
}
//删除某学生信息
intdel(structstudentstu[],intsum)
{
inti,j,flag=0;
chars1[9];
system("cls");
printf("\n\n\t\t请输入要删除学生的学号:
");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].num,s1)==0)//判断学号是否存在
{
flag=1;//该学号存在,用后一个数组覆盖此数组,循环,即可删除
for(j=i;jstu[j]=stu[j+1];
}
if(flag==0)//该学号不存在
printf("\n\n\t\t该学号不存在!
\n");
getch();
if(flag==1)//删除成功,输出提示
{
printf("\n\n\n\t\t删除成功\n");
getch();
sum--;//删除成功,sum自-1;
}
save_file(stu,sum);//保存
returnsum;//返回删除后存在的学生人数
}
//显示打印已有学生信息
voidshow(structstudentstu[],intsum)
{inti;
system("cls");
printf("\n\n\t\t所有学生的信息为:
\n");
for(i=0;i{
printf("学号:
%s\t",stu[i].num);
printf("姓名:
%s\t",stu[i].name);
printf("院系:
%s\t",stu[i].depar);
printf("专业:
%s\t",stu[i].zhuanye);
printf("班级:
%s\t",stu[i].classes);
printf("性别:
%s\t",stu[i].sex);
printf("年龄:
%s\t",stu[i].age);
printf("出生日期:
%s\t",stu[i].birth);
printf("民族:
%s\t",stu[i].nation);
printf("籍贯:
%s\n\n",stu[i].add);
}
printf("按任意键返回");
getch();
system("cls");
}
//添加学生信息
intinsert(structstudentstu[],intsum)
{
inti,j,flag,m;
FILE*sp;
system("cls");
printf("\t请输入要添加的学生的个数:
");
scanf("%d",&m);
read_file(stu);//在添加前读文件
do
{
flag=1;
i=sum;//此时i表示数组下标,添加学生,保存到当前已有数组的下一个,sum为总数,stu[i]表示第sum+1个人
while(flag)
{
flag=0;
printf("\n\n请输入第%d个学生的学号:
",i+1);
scanf("%s",stu[i].num);
for(j=0;j