资讯详情

第一次c语言课程设计——学生选课管理系统

本课程设计实现了一个简单的学生课程选择系统,分为三个角色:学生、教师和管理员。他们可以通过自己的账户进入自己的系统并执行自己的功能。例如,学生只能查询课程信息、结果和学分。教师可以输入、修改、打印学生成绩和查看学生信息。管理员输入学生、课程选择和课程信息。

该系统的帐户密码、学生信息、课程选择信息和课程信息都保存在文件中,系统只能添加或查询信息。如果删除,您需要输入文件删除,并创建自己的文件,并将代码放在同一文件夹下。

下面显示代码

#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语言后写的程序,不能说很好,只能说也顺利的帮自己过了课程设计,也有些冗余,希望多多改进

标签: psg3m磁感应传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台