本课程设计实现了一个简单的学生课程选择系统,分为三个角色:学生、教师和管理员。他们可以通过自己的账户进入自己的系统并执行自己的功能。例如,学生只能查询课程信息、结果和学分。教师可以输入、修改、打印学生成绩和查看学生信息。管理员输入学生、课程选择和课程信息。
该系统的帐户密码、学生信息、课程选择信息和课程信息都保存在文件中,系统只能添加或查询信息。如果删除,您需要输入文件删除,并创建自己的文件,并将代码放在同一文件夹下。
下面显示代码
#include <stdio.h> #include <stdlib.h> #include <string.h> 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 { nbsp; 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语言后写的程序,不能说很好,只能说也顺利的帮自己过了课程设计,也有些冗余,希望多多改进