⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xuankexitong.c

📁 C语言学生选课系统程序
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <stdio.h>
#include <string.h>
#include <conio.h>
/*定义课程结构***********************/
typedef struct cour{
  char name[20];/*课程名称*/
  int semester;/*开始学期*/
  int score;/*考试分数*/
  int value;/*所占学分*/
  int flag;/*课程标志:-1表示还有前继课程未修,0表示无前继课程,1表示可选择该课程,2表示已选择该课程,3表示该课程已通过*/
  char character[10];/*课程性质*/
  int allhour; /*总学时*/
  char studyweek[6];/*开课周和结课周*/
  struct cour *before;
  struct cour *next;
}course;
/*定义学生信息结构**********************/
struct Student{
  char name[10];
  char num[9];
  int semester;
  int data[26*2];/*双数记录考试分数,单数记录课程标志*/
}*stu;
course all[26]=
  {{"高等数学",1,0,5,0,"必修",56,"1-18"},
   {"大学物理",2,0,6,-1,"必修",48,"1-16"},
   {"电路分析",1,0,3,0,"必修",48,"1-16"},
   {"模拟电子电路",2,0,4,-1,"必修",32,"3-18"},
   {"数字电子电路",3,0,4,-1,"必修",32,"1-16"},
   {"微机原理",4,0,6,-1,"必修",48,"1-16"},
   {"C语言编程",1,0,5,0,"必修",32,"3-18"},
   {"Visual C++程序设计",2,0,4,-1,"必修",48,"1-16"},
   {"Java 程序设计",3,0,4,-1,"必修",48,"2-17"},
   {"离散数学",2,0,4,0,"必修",32,"3-18"},
   {"数据结构",3,0,6,-1,"必修",32,"1-16"},
   {"操作系统",4,0,4,-1,"必修",32,"1-16"},
   {"数据库原理",5,0,5,-1,"必修",48,"1-16"},
   {"软件工程",5,0,4,0,"必修",48,"1-16"},
   {"汇编语言",4,0,4,0,"必修",32,"1-16"},
   {"图论",6,0,3,0,"必修",32,"1-16"},
   {"大学英语",1,0,5,0,"必修",56,"1-18"},
   {"编译原理",5,0,4,0,"必修",48,"1-16"},
   {"线性代数",2,0,3,0,"必修",32,"1-15"},
   {"毕业设计",6,0,10,0,"必修",32,"1-16"},
   {"网络技术",2,0,5,0,"选修",48,"1-16"},
   {"专业英语",3,0,4,0,"选修",32,"1-16"},
   {"集合论",2,0,5,0,"选修",32,"1-16"},
   {"数值计算",1,0,4,0,"选修",40,"1-17"},
   {"法律基础",1,0,3,0,"选修",32,"3-18"},
   {"智能机器人",4,0,5,0,"选修",48,"1-17"}};
/*初始界面显示***************************/
StartScr()
{
   printf("###############################################################################\n");
   printf("#######                       欢迎进入学生选课系统                      #######\n");
   printf("###############################################################################\n");
   printf("#######       1.教师登录             2.学生登录            3.退出       #######\n");
   printf("###############################################################################\n\n");
}
TeacherScr()
{
   printf("###############################################################################\n");
   printf("#######                   欢迎进入学生选课系统(教师首页)                #######\n");
   printf("###############################################################################\n");
   printf("####### 1.创建学生用户   2.学生信息管理   3.更改密码    4.返回   5.退出 #######\n");
   printf("###############################################################################\n\n");
}
TeacherScr2()
{
   printf("###############################################################################\n");
   printf("#######             欢迎进入学生选课系统(教师->学生信息管理)            #######\n");
   printf("###############################################################################\n");
   printf("#######  1.成绩输入         2.学生信息        3.显示所有课程信息        #######\n");
   printf("#######  4.特殊操作         5.返回            6.退出                    #######\n");
   printf("###############################################################################\n\n");
}
TeacherScr3()
{
   printf("###############################################################################\n");
   printf("#######       欢迎进入学生选课系统(教师->学生信息管理->特殊操作)        #######\n");
   printf("###############################################################################\n");
   printf("#######      1.成绩修改             2.学期修改          3.代选课程      #######\n");
   printf("#######      4.设置可选课程         5.返回              6.退出          #######\n");
   printf("###############################################################################\n\n");
}

StudentScr()
{
   printf("###############################################################################\n");
   printf("#######                  欢迎进入学生选课系统(学生首页)                 #######\n");
   printf("###############################################################################\n");
   printf("#######    1.选择课程     2.成绩查询      3.学分查询     4.查询已选课程 #######\n");
   printf("#######    5.查询所有课程 6.返回          7.退出                        #######\n");
   printf("###############################################################################\n\n");
}
StudentScr2()
{
   printf("###############################################################################\n");
   printf("#######           欢迎进入学生选课系统(学生->查询所有课程)              #######\n");
   printf("###############################################################################\n");
   printf("#######     1.显示所有课程     2.按学分查询      3.按课程性质查询       #######\n");
   printf("#######     4.返回             5.退出                                   #######\n");
   printf("###############################################################################\n\n");
}
/*将学生信息课程部分读入课程信息组*/
ReadInfo()
{
   int i;
   for(i=0;i<26;i++)
  {
     all[i].score=stu->data[(i+1)*2-2];
     all[i].flag=stu->data[(i+1)*2-1];
  }
}
/*将课程信息组写入学生信息课程部分*/
WriteInfo()
{
   int i;
   for(i=0;i<26;i++)
  {
     stu->data[(i+1)*2-2]=all[i].score;
     stu->data[(i+1)*2-1]=all[i].flag;
  }
}
/*输出可选课程*/
ShowCourToSelect()
{
 int i,j=0;
 printf("  编号           课程名称               学期         学分         性质  \n");
 for(i=0;i<26;i++)
  {
    if((all[i].semester<=stu->semester&&(all[i].flag==0))||all[i].flag==1)
     {
          all[i].flag=1;
          j++;
          printf("   %-2d        %-28s %d           %d           %-10s\n",i+1,all[i].name,all[i].semester,all[i].value,all[i].character);
     }
  }
  return j;
}
/*选课函数*/
Select(int i)
{
  switch(all[i].flag)
  {
    case 1:all[i].flag=2;printf("    %s选择成功!\n",all[i].name);break;
    case 2:printf("    错误!已经选择该课程。\n");break;
    case 3:printf("    错误! 已经修完该课程。\n");break;
    case 0:printf("    错误!您在本学期不能选择该课程。\n");break;
    case -1:printf("    错误!您有前继课程未修,不能选择该课程。\n");break;
    default: printf("    课程标志错误!\n");
  }
}
main(int argc,char *av[])
{
   FILE *fp;/*文件指针*/
   int key;/*记录操作数*/
   int i;/*循环计数*/
   int cournum;/*课程数目*/
   int selnum;/*选择课程数目*/
   int score;/*记录所输入成绩*/
   int x,y;/*记录位置*/
   char pass1[7],pass2[7];/*记录密码*/
   char back;/*记录返回操作数*/
   int  getvalue,allvalue,allscore;
   char a[10],b[10]; /*记录学号及姓名*/
/*课程链接*/
  /***************关联课程1****************/
  all[0].before=NULL;all[0].next=&all[1];
  all[1].before=&all[0];all[1].next=NULL;
  /***************关联课程2****************/
  all[2].before=NULL;all[2].next=&all[3];
  all[3].before=&all[2];all[3].next=&all[4];
  all[4].before=&all[3];all[4].next=&all[5];
  all[5].before=&all[4];all[5].next=NULL;
  /***************关联课程2****************/
  all[6].before=NULL;all[6].next=&all[7];
  all[7].before=&all[6];all[7].next=&all[8];
  all[8].before=&all[4];all[8].next=NULL;
  /***************关联课程3****************/
  all[9].before=NULL;all[9].next=&all[10];
  all[10].before=&all[9];all[10].next=&all[11];
  all[11].before=&all[10];all[11].next=&all[12];
  all[12].before=&all[11];all[12].next=NULL;
  /***************无关联课程****************/
  for(i=13;i<26;i++)
  {
     all[i].before=NULL;all[i].next=NULL;
  }
  /******************课程连接结束*****************************/
START:
   StartScr();
   printf("    请输入操作数:");
   scanf("%d",&key);
   switch(key)
   {
     case 1:goto TEACHERPASS;
     case 2:goto STUDENTPASS;
     case 3:goto END;
     default: printf("    输入错误!\n");
     printf("    请按任意键继续操作……\n");
     getch();
     clrscr();
     goto  START;
   }
TEACHERPASS:
/*密码登录*/
    printf("    请输入六个字符的教师密码:");
   for(i=0;i<6;i++)
   {
       pass1[i]=getch();
       printf("*");
   }
   pass1[i]='\0';
   if((fp=fopen("password","r"))==NULL)
    {
      printf("    对不起,找不到密码文件\n");
      printf("    请按任意键继续操作……\n");
      getch();
      clrscr();
      goto START;
    }
   else fgets(pass2,7,fp);
   fclose(fp);
   if(strcmp(pass1,pass2)!=0)
   {
     printf("    密码错误!\n");
     printf("    请按任意键继续操作……\n");
     getch();
     clrscr();
     goto START;
   }
  else printf("    教师登陆成功!\n");
  printf("    请按任意键继续操作……\n");
  clrscr();
  goto TEACHER;
/*进入教师首页*/
TEACHER:
  TeacherScr();
  printf("    请输入操作数:");
  scanf("%d",&key);
   switch(key)
   {
      case 1:goto CREAT;/*产生新用户*/
      case 2:goto STUPARTPASS;/*进入学生信息界面*/
      case 3:goto PASSWORD;
      case 4:goto BACK;
      case 5:goto END;
      default: printf("    操作数输入错误!\n");
     printf("    请按任意键继续操作……\n");
     getch();
     clrscr();
     goto  TEACHER;
   }
/*产生新用户*/CREAT:
   clrscr();
   TeacherScr();
   printf("##############                   创建学生用户                    ##############\n");
   printf("    请输入学生学号:");
   scanf("%s",a);
   if(strlen(a)!=8)
   {
     printf("    学号输入错误!\n");
     printf("    请按任意键继续操作……(按 'B' 键回到教师首页):\n");
     back=getch();
     if(back=='b'||back=='B')
       {
         clrscr();
         goto TEACHER;
       }
     else
     {
       clrscr();
       TeacherScr();
       goto CREAT;
     }
   }
   strcpy(av[1],a);
   fp=fopen(av[1],"r");
   if(fp!=NULL)
   {
     printf("    对不起该用户已存在!\n");
     printf("    请按任意键继续操作……(按 'B' 键回到教师首页):\n");
     back=getch();
     if(back=='b'||back=='B')
       {
         clrscr();
         fclose(fp);
         goto TEACHER;
       }
      else
     {
       clrscr();
       TeacherScr();
       fclose(fp);
       goto CREAT;
     }
   }
   else fclose(fp);
   printf("    请输入学生姓名:");
   scanf("%s",b);
   strcpy(stu->name,b);
   strcpy(stu->num,a);
   stu->semester=1;
   for(i=0;i<26*2;i++)
   {
     stu->data[i]=0;
   }
   /*将数据写入学生信息文件*/
   strcpy(av[1],a);
   if((fp=fopen(av[1],"w"))==NULL)
   {
     printf("    对不起,不能创建新学生用户!\n");
     getch();
     fclose(fp);
     clrscr();
     goto TEACHER;
   }
   else
   {
     fwrite(stu,sizeof(struct Student),1,fp);
     fclose(fp);
   }
   /*将数据写入学生信息文件********结束*******************/
     printf("    请按任意键继续操作……(按 'B' 键回到教师首页):\n");
     back=getch();
     if(back=='b'||back=='B')
       {
         clrscr();
         fclose(fp);
         goto TEACHER;
       }
      else
     {
       clrscr();
       TeacherScr();
       fclose(fp);
       goto CREAT;
     }
/*进入学生信息界面*/
STUPARTPASS:
   clrscr();
   TeacherScr2();
   printf("    请输入学生学号(按'5'键返回,按'6'键退出)\n    ");
   scanf("%s",a);
  if(a[0]=='5')
  {
      clrscr();
   goto  TEACHER;
  }
  else if(a[0]=='6') goto END;
  strcpy(av[1],a);
  if((fp=fopen(av[1],"r"))==NULL)
  {
    printf("    对不起,不存在该用户!\n");

    getch();
    clrscr();
    goto STUPARTPASS;
  }
  else  fread(stu,sizeof(struct Student),1,fp);
  ReadInfo();
  fclose(fp);
 STUPART:
  clrscr();
  TeacherScr2();
  printf("#######                          学号 :  %-9s                       ######\n",stu->num);
  printf("    请输入操作数:");
  scanf("%d",&key);
   switch(key)
   {
     case 1:goto GIVESCORE;/*输入学生成绩*/
     case 2:goto SHOWSTUINFO; /*显示学生信息*/
     case 3:goto ALLCOURSE;/*显示所有课程*/
     case 4:goto SPECIALPASS;/**/
     case 5:clrscr(); goto  TEACHER;
     case 6:goto END;
     default: printf("    操作数输入错误!\n");
              printf("    请按任意键继续操作……\n");
              getch();
              clrscr();
              goto  STUPART;
   }
/*输入学生成绩*/GIVESCORE:
  /*输入学号*/
  printf("    请输入学生学号(按'5'键返回,按'6'键退出):\n    ");
  clrscr();
  TeacherScr2();
  printf("##############                     成绩输入                      ##############\n");
  printf("#######                          学号 :  %-9s                       ######\n",stu->num);
  printf("  编号        课程名称                   学分          性质       分数\n");
  allvalue=0;
  getvalue=0;
  for(i=0;i<26;i++)
  {

    if(all[i].flag==2)
    {
      allvalue=all[i].value+allvalue;
      printf("   %-2d        %-28s  %d           %-10s ",i+1,all[i].name,all[i].value,all[i].character);
      GET:
      x=wherex();
      y=wherey();
      scanf("%d",&score);
      if(score>=0&&score<=100)
      {
        all[i].score=score;
          if(all[i].score>=60)
        {
          all[i].flag=3;
          getvalue=getvalue+all[i].value;
          if (all[i].next!=NULL&&all[i].next->flag<1)
            all[i].next->flag=1;
        }
        else  all[i].flag=1;
      }
      else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -