本次课程设计是实现了一个简单的学生选课系统,里面分为了学生,老师,管理员三个角色,分别可以通过各自的账号进入各自的系统,执行各自的功能。比如学生只能查询课程信息,查看成绩,根据学分查询,而老师可以录入,修改,打印学生的成绩,还能查看学生信息,管理员则是录入学生、选课、课程信息。
该系统的账号密码,学生信息,选课信息,课程信息全都采用文件保存,且系统只能添加或查询信息,删除则需要自己进入文件删除,并且自己创建文件并和代码放在同一个文件夹下。
下面展示代码
#include
#include
#include
struct sysuser//账号结构
{
char username [20];
char password [8];
};
struct course//课程信息
{
char num[10];/*课程号*/
char name [30];/*课程名*/
int credit;/*学分*/
};
struct student//学生信息
{
char num[12];/*学号*/
char name [10];/*姓名*/
char sex [2];/*性别*/
char subject [30];/*专业*/
};
struct Ccourse//选课信息
{
char num[10];/*课程号*/
char Snum[12];/*学号*/
int grade;/*成绩*/
};
int checkuser (struct sysuser *psu);//检查账户函数
void Students();//学生系统函数
void Teacher();//教师系统函数
void Admin();//管理员系统函数
void rcourse();//查询课程信息函数
void rstudent();//查询成绩函数
void rcredit();//按学分查询函数
void wsg();//录入成绩函数
void resg();//修改成绩函数
void psg();//打印成绩函数
void aws();//录入学生信息函数
void awc();//录入课程信息函数
void ars();//查询学生信息函数
void awCc();//录入选课信息函数
int main()
{
int n,w=1;
int n1;
struct sysuser su;
do//循环实现重复登入
{
system("cls");//清屏
printf("\n\n\t\t**********菜单**********\n\n");
printf("\t\t1.登入\n");
printf("\t\t2.退出程序\n\t\t");
scanf("%d",&n1);
if(n1==1)
{
system("cls");
puts("\n\n\t\t**********请登入**********\n\n");
printf("\t\t账号:");
scanf("%s",su.username);//保存账号
printf("\t\t密码:");
scanf("%s",su.password);//保存密码
n=checkuser(&su);
switch(n)
{
case 0:
system("cls");
printf("\n\n\t\t用户不存在或密码错误!\n");
printf("\t\t按任意键返回登入界面\n\t\t");
system("pause");
break;
case 1://进入学生系统
Students();
break;
case 2://进入教师系统
Teacher();
break;
case 3://进入管理员系统
Admin();
break;
}
}
else
{
break;//结束循环
}
}
while(w==1);
return 0;
}
int checkuser (struct sysuser *psu)//检查账户函数
{
FILE *fp;
char usr [30],usr1 [30],pwd [10];
int i,check=0;
strcpy(usr,psu->username);/*储存账号*/
strcpy(pwd,psu->password);/*储存密码*/
strcat(usr," ");strcat(usr,pwd);strcat(usr,"\n");/*连接账号与密码,用于在文件中匹配*/
for(i=1;i<=3;i++)
{
if(i==1)
{
if((fp=fopen("stu.txt","a+"))==NULL)/*打开学生密码数据库*/
{
printf("打开文件时发生错误!\n");
exit(0);
}
}
else if(i==2)
{
if((fp=fopen("teacher.txt","a+"))==NULL)/*打开教师密码数据库*/
{
printf("打开文件时发生错误!\n");
exit(0);
}
}
else
{
if((fp=fopen("admin.txt","a+"))==NULL)/*打开管理员密码数据库*/
{
printf("打开文件时发生错误!\n");
exit(0);
}
}
while(!feof(fp))/*遍历判断账号是否合法*/
{
fgets(usr1,30,fp);/*读入一行账户数据字符串到usr1*/
if(strcmp(usr,usr1)==0)/*比较判断usr与usr1是否相同*/
{
check=i;/*储存用户类型数据*/
break;
}
}
if(check!=0)
{
break;
}
fclose(fp);
}
fclose(fp);//关闭文件
return check;//返回用户类型(1:学生,2:教师,3:管理员,0:用户不存在或密码错误)
}
void Students()//学生系统函数
{
int w=1;
char n;
char CH;
do//循环使功能结束后返回菜单
{
system("cls");
printf("\n\n\t\t**********学生菜单**********\n\n");
printf("\t\t1.查询课程信息\n");
printf("\t\t2.查询成绩\n");
printf("\t\t3.按学分查询课程\n");
printf("\t\t4.返回登入界面\n");
CH=getchar();
scanf("%c",&n);
if(n=='1')
{
rcourse();//查询课程函数
}
else if(n=='2')
{
rstudent();//查询成绩函数
}
else if(n=='3')
{
rcredit();//按学分查询函数
}
else
{
break;//结束循环
}
system("pause");
}
while(w==1);
}
void Teacher()//教师系统函数
{
int w=1;
char n;
char CH;
do//循环使功能结束后返回菜单
{
system("cls");
printf("\n\n\t\t**********教师菜单**********\n\n");
printf("\t\t1.录入学生成绩\n");
printf("\t\t2.修改学生成绩\n");
printf("\t\t3.打印学生成绩单\n");
printf("\t\t4.返回登入界面\n\t\t");
CH=getchar();
scanf("%c",&n);
if(n=='1')
{
wsg();//录入成绩函数
}
else if(n=='2')
{
resg();//修改成绩函数
}
else if(n=='3')
{
psg();//打印成绩函数
}
else
{
break;//结束循环
}
printf("\n\t\t");
system("pause");
}
while(w==1);
}
void Admin()//管理员系统
{
int w=1;
char n;
char CH;
do//循环使功能结束后返回菜单
{
system("cls");
printf("\n\n\t\t**********管理员菜单**********\n\n");
printf("\t\t1.录入学生信息\n");
printf("\t\t2.录入课程信息\n");
printf("\t\t3.查询学生信息\n");
printf("\t\t4.录入选课信息\n");
printf("\t\t5.返回登入界面\n\t\t");
CH=getchar();
scanf("%c",&n);
if(n=='1')
{
aws();//录入学生信息函数
}
else if(n=='2')
{
awc();//录入课程信息函数
}
else if(n=='3')
{
ars();//查询学生信息函数
}
else if(n=='4')
{
awCc();//录入选课信息函数
}
else
{
break;//结束循环
}
}
while(w==1);
}
void rcourse()//查询课程信息函数
{
FILE *fp1,*fp2;
struct Ccourse a1;
struct course a2;
int CN1,CN2;
char snum[12];
CN1=CN2=0;/*检查结果变量,初始化为0*/
fp1=fopen("Ccourse.txt","ab+");/*二进制打开文件“Ccourse.txt”读入*/
fp2=fopen("course.txt","ab+");/*二进制打开文件“course.txt”读入*/
system("cls");
printf("\n\n\t\t********************\n\n\t\t");
printf("请输入您的学号:");
scanf("%s",snum);
while(!feof(fp1))//遍历文件
{
fscanf(fp1,"%s %s %d",a1.num,a1.Snum,&a1.grade);
if(strcmp(a1.Snum,snum)==0)//判断
{
CN1=1;
break;
}
}
if(CN1==1)
{
while(!feof(fp2))//遍历文件寻找对应信息
{
fscanf(fp2,"%s %s %d",a2.name,a2.num,&a2.credit);
if(strcmp(a1.num,a2.num)==0)
{
CN2=1;
break;
}
}
if(CN2==1)
{
printf("\t\t课程名:%s\n\t\t课程号:%s\n\t\t学分:%d\n\t\t",a2.name,a2.num,a2.credit);
}
else
{
printf("\t\t查无课程信息\n\t\t");
}
}
else
{
printf("\t\t查无课程信息\n\t\t");
}
fclose(fp1);
fclose(fp2);
}
void rstudent()//查询成绩函数
{
FILE *fp1;
char snum[12];
int CN1=0;
struct Ccourse a1;
fp1=fopen("Ccourse.txt","rb");
system("cls");
printf("\n\n\t\t******************************\n\n\t\t");
printf("请输入您的学号:");
scanf("%s",snum);
while(!feof(fp1))//遍历文件
{
fscanf(fp1,"%s %s %d\n",a1.num,a1.Snum,&a1.grade);
if(strcmp(a1.Snum,snum)==0)
{
CN1=1;
break;
}
}
if(CN1==1)
{
printf("\t\t你的成绩:%d\n\t\t",a1.grade);
}
else
{
printf("\t\t查无成绩\n\t\t");
}
fclose(fp1);
}
void rcredit()//按学分查询函数
{
FILE *fp1;
int credit;
int CN1=0;
struct course a1;
fp1=fopen("course.txt","rb");
system("cls");
printf("\n\n\t\t******************************\n\n\t\t");
printf("请输入学分:");
scanf("%d",&credit);
while(!feof(fp1))//遍历文件
{
fscanf(fp1,"%s %s %d\n",a1.name,a1.num,&a1.credit);
if(credit==a1.credit)
{
CN1=1;
break;
}
}
if(CN1==1)
{
printf("\t\t课程:%s\n\t\t",a1.name);
}
else
{
printf("\t\t查无课程\n\t\t");
}
fclose(fp1);
}
void wsg()//录入学生成绩函数
{
system("cls");
char Snum[12];
FILE *fp1,*fp2;
int n;
int CN1=0;
char grade[3];
struct Ccourse a1;
printf("\n\n\t\t**********录入成绩**********\n\n\t\t");
printf("1.按学号录入\n\t\t");;
printf("2.返回教师菜单\n\t\t");
scanf("%d",&n);
if(n==1)
{
system("cls");
fp1=fopen("Ccourse.txt","rb+");
printf("\n\n\t\t**********录入成绩**********\n\n\t\t");
printf("请输入学号:");
scanf("%s",&Snum);
while(!feof(fp1))//遍历文件
{
fscanf(fp1,"%s %s %d\n",a1.num,a1.Snum,&a1.grade);
if(strcmp(a1.Snum,Snum)==0)//比较找出对应信息
{
CN1=1;
break;
}
}
if(CN1==1)
{
system("cls");
printf("\n\n\t\t**********录入成绩**********\n\n\t\t");
printf("学号:%s\n",Snum);
printf("\t\t课程号:%s\n",a1.num);
printf("\t\t请输入成绩:");
scanf("%s",grade);
fseek(fp1,-10L,1);
fprintf(fp1,"%s %s %s\n",a1.num,a1.Snum,grade);//写入文件
printf("\t\t已录入");
}
else
{
system("cls");
printf("\n\n\t\t******************************\n\n\t\t");
printf("学号不存在");
}
fclose(fp1);
}
}
void resg()//修改学生成绩
{
system("cls");
char Snum[12];
char grade[3];
struct Ccourse a1;
FILE *fp1;
int CN1=0;
fp1=fopen("Ccourse.txt","rb+");
printf("\n\n\t\t**********修改成绩**********\n\n\t\t");
printf("请输入学号:");
scanf("%s",&Snum);
while(!feof(fp1))//遍历文件
{
fscanf(fp1,"%s %s %d\n",a1.num,a1.Snum,&a1.grade);
if(strcmp(a1.Snum,Snum)==0)//找出对应账号
{
CN1=1;
break;
}
}
if(CN1==1)
{
system("cls");
printf("\n\n\t\t******************************\n\n\t\t");
printf("学号:%s\n",Snum);
printf("\t\t课程号:%s\n",a1.num);
printf("\t\t当前成绩:%d\n",a1.grade);
printf("\t\t请输入修改后成绩:");
scanf("%s",grade);
fseek(fp1,-10L,1);
fprintf(fp1,"%s %s %s\n",a1.num,a1.Snum,grade);//写入文件
printf("\t\t已修改");
}
else
{
system("cls");
printf("\n\n\t\t******************************\n\n\t\t");
printf("学号不存在");
}
fclose(fp1);
}
void psg()//打印学生成绩
{
system("cls");
char Snum[12];
struct Ccourse a1;
struct student a2;
FILE *fp1,*fp2;
int CN1,CN2;
CN1=CN2=0;
fp1=fopen("Ccourse.txt","rb");
fp2=fopen("student.txt","rb");
printf("\n\n\t\t**********打印学生成绩**********\n\n\t\t");
printf("请输入学号:");
scanf("%s",&Snum);
while(!feof(fp1))
{
fscanf(fp1,"%s %s %d",a1.num,a1.Snum,&a1.grade);
if(strcmp(a1.Snum,Snum)==0)
{
CN1=1;
break;
}
}
if(CN1==1)
{
while(!feof(fp2))
{
fscanf(fp2,"%s %s %s %s\n",a2.name,a2.num,a2.sex,a2.subject);
if(strcmp(a1.Snum,a2.num)==0)
{
CN2=1;
break;
}
}
if(CN2==1)
{
system("cls");
printf("\n\n\t\t******************************\n\n\t\t");
printf("姓名:%s\n",a2.name);
printf("\t\t学号:%s\n",Snum);
printf("\t\t课程号:%s\n",a1.num);
printf("\t\t成绩:%d\n",a1.grade);
}
else
{
printf("\n查无成绩信息\n\t\t");
}
}
else
{
printf("\n查无成绩信息\n\t\t");
}
fclose(fp1);
fclose(fp2);
}
void aws()//录入学生信息函数
{
system("cls");
FILE *fp1;
int w=1;
struct student a1;
fp1=fopen("student.txt","ab+");
do
{
system("cls");
printf("\n\n\t\t**********录入学生信息**********\n\n\t\t");
printf("请输入学号:");
scanf("%s",a1.num);
printf("\t\t请输入姓名:");
scanf("%s",a1.name);
printf("\t\t请输入性别:");
scanf("%s",a1.sex);
printf("\t\t请输入课程名:");
scanf("%s",a1.subject);
fprintf(fp1,"%s %s %s %s\n",a1.name,a1.num,a1.sex,a1.subject);
printf("\t\t已录入\n\t\t1.继续录入\n\t\t2.结束录入\n\t\t");
scanf("%d",&w);
}
while(w==1);
fclose(fp1);
}
void awc()//录入课程信息函数
{
system("cls");
FILE *fp1;
int w=1;
struct course a1;
fp1=fopen("course.txt","ab+");
do
{
printf("\n\n\t\t**********录入课程信息**********\n\n\t\t");
printf("请输入课程名:");
scanf("%s",a1.name);
printf("\t\t请输入课程号:");
scanf("%s",a1.num);
printf("\t\t请输入学分:");
scanf("%d",&a1.credit);
fprintf(fp1,"%s %s %d\n",a1.name,a1.num,a1.credit);
printf("\t\t已录入\n\t\t1.继续录入\n\t\t2.结束录入\n\t\t");
scanf("%d",&w);
}
while(w==1);
fclose(fp1);
}
void ars()//查询学生信息函数
{
system("cls");
FILE *fp1;
int w=1;
int CN1;
struct student a1;
char snum[12];
fp1=fopen("student.txt","ab+");
do
{
CN1=0;
system("cls");
printf("\n\n\t\t**********查询学生信息**********\n\n\t\t");
printf("请输入学号:");
scanf("%s",snum);
while(!feof(fp1))
{
fscanf(fp1,"%s %s %s %s\n",a1.name,a1.num,a1.sex,a1.subject);
if(strcmp(a1.num,snum)==0)
{
CN1=1;
break;
}
}
if(CN1==1)
{
printf("\t\t姓名:%s\n",a1.name);
printf("\t\t学号:%s\n",a1.num);
printf("\t\t性别:%s\n",a1.sex);
printf("\t\t课程:%s\n",a1.subject);
}
else
{
printf("\t\t查无信息\n");
}
printf("\t\t已查询\n\t\t1.继续查询\n\t\t2.结束查询\n\t\t");
scanf("%d",&w);
rewind(fp1);
}
while(w==1);
fclose(fp1);
}
void awCc()//录入选课信息函数
{
FILE *fp1,*fp2,*fp3;
struct student a1;
struct course a2;
struct Ccourse a3;
fp1=fopen("student.txt","ab+");
fp2=fopen("course.txt","ab+");
fp3=fopen("Ccourse.txt","wb");
while(!feof(fp1))
{
fscanf(fp1,"%s %s %s %s\n",a1.name,a1.num,a1.sex,a1.subject);
while(!feof(fp2))
{
fscanf(fp2,"%s %s %d\n",a2.name,a2.num,&a2.credit);
if(strcmp(a1.subject,a2.name)==0)
{
strcpy(a3.Snum,a1.num);
strcpy(a3.num,a2.num);
fprintf(fp3,"%s %s %s\n",a3.num,a3.Snum,"000");
}
}
rewind(fp2);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
printf("\n\n\t\t已录入\n\t\t");
system("pause");
}
此为学习一学期C语言后写的程序,不能说很好,只能说也顺利的帮自己过了课程设计,也有些冗余,希望多多改进