首页 > 编程 > C > 正文

基于C语言实现学生选课系统

2020-01-26 13:32:03
字体:
来源:转载
供稿:网友

鉴于C语言实现的通讯录,为了巩固C语言的基础知识,试着写一个简单的学生选课系统。

思路比较简单:

1.回滚显示各种提示信息或操作信息

2.链表操作。

代码中有管理员部分功能没有实现,学生和老师的功能基本实现,但有待加固,如果初学者可是试着去完善一下。
还可以将老师,学生的信息输出到文件文本中,本代码中没有实现,但并不是很难。

代码如下:

#include <stdio.h>#include <stdlib.h>#include <string.h>/* 总链表――存放所有信息 */typedef struct Sum_Node{  /* 学生信息 */  char stuNo[20][20];  char stuName[20][20];  char stuSex[20][20];  /* 课程信息 */  char CourseNum[20];  char CourseName[20];  char CourseTeacher[20];  struct Sum_Node *next;}TotalNode;/* 链表管理员――暂时不需要 *//*typedef struct Node{  char Num[20];  char Name[20];  char Sex[10];  struct Node *next;}Manager_Node;*/char studentAccount[20];char studentPassword[20];char teacherAccount[20];char teacherPassword[20];char managerAccount[20];char managerPassword[20];/* 定义结构体指针 */TotalNode *pTeacher;TotalNode *pStudent;/* 函数的声明 */void checkPerson_Msg(TotalNode *phead,int n);void CreateTeacherNode(TotalNode *head);/* 学生信息的输出-链表 */void OutStudentNode(TotalNode *head,char *Account){  TotalNode *p;  int num=0;  int i,j;  int flag=0;  char Account_random[20]="";  pStudent=pTeacher; // 学生和老师用的链表是同一个  p=pStudent;  puts("******所选课程信息******");  puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");  if(pStudent==NULL)  {    puts("没有数据!");    puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");    return;  }  printf("请输入所要查询人的姓名:");  gets(Account_random);  // 获取所要查询的学生姓名  if(0 == Account_random[0])  {      gets(Account_random);  }  while(p!=NULL)  {    for(j=0;j<20;j++)    {      if(0 == strcmp(p->stuName[j],Account_random))      {        printf("课程代码:%s/t",p->CourseNum);        printf("课程名称:%s/t",p->CourseName);        printf("课程老师:%s/t",p->CourseTeacher);        for(i=0;i<20;i++)        {          if(p->stuNo[i][0]!='/0')          {            num++;          }        }        printf("选课学生:%d/t",num);        num=0; // 清0操作        putchar('/n');        flag=1;      }    }    p=p->next;  }  if(0 == flag)  {    puts("没有该学生选课信息!!!!");  }  puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");  putchar('/n'); }/* 学生信息的插入-链表 */void InsertStudentNode(TotalNode *head,char *Account){  TotalNode *p;  int i;  char courseCode[20]="";  pStudent=pTeacher; // 学生和老师用的链表是同一个,都是链表头  p=pStudent;  if(p==NULL)  {    puts("等待教师录入选课信息,请下次再进行选择!!");    return;  }  printf("【请输入正确的课程代码】");  gets(courseCode);  if(0 == courseCode[0])  {    gets(courseCode);  }  while(p!=NULL)  {    if(0 == strcmp(p->CourseNum, courseCode))    {      for(i=0;i<20;i++)      {          if(p->stuNo[i][0] == '/0')        {          printf("请输入学号:");          gets(p->stuNo[i]);          printf("请输入姓名:");          gets(p->stuName[i]);          printf("请输入性别:");          gets(p->stuSex[i]);          puts("选课成功!!!!");          return;        }      }    }    p=p->next;  }  puts("$$$$$$选课失败,请重新选择$$$$$$");}/* 删除所选课程 */void DeleteStudentNode(TotalNode *head,char *Account){  char coursNo[20]="";  // 课程代码  char student[20]="";  // 学生姓名  TotalNode *p;  int i;  int flag=0;  pStudent=pTeacher; // 学生和老师用的链表是同一个,都是链表头  p=pStudent;  if(pStudent==NULL)  {    puts("没选该课程,删除失败!!!!");    return;  }  printf("【输入学生姓名】");  gets(student);  if(0 == student[0])  {    gets(student);  }  printf("【请输入删除的课程代码】");  gets(coursNo);  if(0 == coursNo[0])  {    gets(coursNo);  }  while(p!=NULL)  {    if(0==strcmp(p->CourseNum,coursNo)) // 查询所要删除的课程代码    {      for(i=0;i<20;i++)      {        if(0==strcmp(p->stuName[i],student))        {          /* 初始化清0操作 */          p->stuNo[i][0]='/0';          p->stuName[i][0]='/0';          p->stuSex[i][0]='/0';          puts("删除成功!!!!");          flag=1;   // 删除标志位        }      }      }    p=p->next;  }  if(0 == flag)  // 如果删除成功标志位置1  {    puts("删除失败!!!!");  }}/* 教师信息的输出-链表 */void OutTeacherNode(TotalNode *head){  TotalNode *p;  int num=0;  int i;  p=pTeacher;  puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");  if(pTeacher==NULL)  {    puts("没有数据!");    puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");    return;  }  while(p!=NULL)  {    printf("课程代码:%s/t",p->CourseNum);    printf("课程名称:%s/t",p->CourseName);    printf("课程老师:%s/t",p->CourseTeacher);    for(i=0;i<20;i++)    {      if(p->stuNo[i][0]!='/0')      {        num++;      }    }    printf("选课学生:%d/t",num);    num=0; // 清0操作    putchar('/n');    p=p->next;  }  puts("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");  putchar('/n'); }/* 教师信息的插入-链表 */void InsertTeacherNode(TotalNode *head){  TotalNode *p;  TotalNode *q;  int i;  p=pTeacher; // 教师链表的头  if(pTeacher==NULL)  {    CreateTeacherNode(head);    puts("添加成功!");    return;  }  while(p!=NULL)  {    if(p->next == NULL)    {      q=(TotalNode *)malloc(sizeof(TotalNode));      p->next=q;      q->next=NULL;      for(i=0;i<20;i++)      {        q->stuNo[i][0]='/0';      }      printf("请输入课程代码:");      gets(q->CourseNum);      if(0 == *q->CourseNum)      {        gets(q->CourseNum);      }      printf("请输入课程名称:");      gets(q->CourseName);      printf("请输入课程教师:");      gets(q->CourseTeacher);      puts("添加成功!");      break;    }    p=p->next;  }  //pTeacher=head;}/* 教师信息的插入-链表 */void CreateTeacherNode(TotalNode *head){  int i;  pTeacher=(TotalNode *)malloc(sizeof(TotalNode));  pTeacher->next=NULL;  for(i=0;i<20;i++)  {    pTeacher->stuNo[i][0]='/0';  }  printf("请输入课程代码:");  gets(pTeacher->CourseNum);  if(0 == *pTeacher->CourseNum)  {    gets(pTeacher->CourseNum);  }  printf("请输入课程名称:");  gets(pTeacher->CourseName);  printf("请输入课程教师:");  gets(pTeacher->CourseTeacher);  //pTeacher=head;}/* 删除指定数据 */void DeleteTeacherNode(TotalNode *phead){  char coursNo[20]="";  // 课程代码  TotalNode *p;  TotalNode *s;  p=pTeacher; // 教师链表的头  s=pTeacher;  if(NULL==pTeacher)  {    puts("没有课程信息!!!!");    return;  }  printf("【请输入删除的课程代码】");  gets(coursNo);  if(0 == coursNo[0])  {    gets(coursNo);  }  if(0 == strcmp(p->CourseNum,coursNo))  {    pTeacher=p->next;    puts("删除成功!!");    return;  }  while(p != NULL)  {    if(0 == strcmp(p->CourseNum,coursNo))    {      s->next=p->next;      puts("删除成功!!");      return;    }    s=p;    p=p->next;  }}/* 功能显示 */void display(TotalNode *phead){  int n;  while(1)  {    puts("=========请选择登录页面=========");    puts("[1]学生登录");    puts("[2]教师登录");    puts("[3]管理员登录");    puts("[4]退出系统");    while(1)  // 循环检查输入的值是否正确    {      printf("【请选择】");      scanf("%d",&n);      if(n>4 || n<1)      {        puts("输入有误,请选择正确的选项:");        continue;    // 输入不正确,重新输入      }      else      {        break; // 输入正确,退出循环      }    }    if( 1 == n ) //  学生登录系统    {      puts("=========欢迎登录学生系统=========");      printf("请输入账号和密码/n");      checkPerson_Msg(phead,1);    }    if( 2 == n ) //  老师登录系统    {      puts("=========欢迎登录教师系统=========");      printf("请输入账号和密码/n");      checkPerson_Msg(phead,2);    }    if( 3 == n ) //  管理员登录系统    {      puts("=========欢迎登录管理员系统=========");      printf("请输入账号和密码/n");      checkPerson_Msg(phead,3);    }    if( 4 == n ) //  退出系统    {      puts("@@@@@@@@@欢迎下次登录,再见!!!@@@@@@@@@");      exit(0);        }  }}/* 学生登录后的操作,查询、修改 */void Student_Mng(TotalNode *phead, char *Account,int n){  switch(n)  {  case 1:   // 查询    OutStudentNode(phead,Account);    break;  case 2:   // 添加    InsertStudentNode(phead,Account);    break;  case 3:   // 删除    DeleteStudentNode(phead,Account);    break;  case 4: ;  // 返回主页面,上层已经实现,此处不需要考虑    break;  default:    puts("异常!");    break;  }}/* 教师登录后的操作,查询、修改 */void Teacher_Mng(TotalNode *phead, char *Account,int n){  switch(n)  {  case 1: // 查询学生选课情况    OutTeacherNode(phead);    break;  case 2: // 添加和删除课程信息    InsertTeacherNode(phead);    break;  case 3:       DeleteTeacherNode(phead);    break;  case 4:    break; // 上层实现其功能  default:    puts("异常!");    break;  }}/* 管理员登录后的操作,查询、修改 */void Manager_Mng(char *Account, int n){  switch(n)  {  case 1:    break;  case 2:    break;  case 3:    break;  default:    puts("异常!");    break;  }}/* 显示各功能登录后的信息 */void display_Detailed(TotalNode *phead ,char *Account,int n){  int in;  switch(n)  {  case 1:    while(1)    {      printf("=========欢迎%s同学=========/n",Account);      puts("[1]查询已选课程"); // 查询自己所选的所有课程包括:课程代码、课程名称、任课老师      puts("[2]添加课程");    // 增加所选课程      puts("[3]删除所选课程"); // 删除所选课程      puts("[4]返回主页面");      printf("【请选择】");      scanf("%d",&in);      if(4 == in)      {        return; // 返回上层登录页面      }      Student_Mng(pStudent,Account, in);      //puts("[4]");    }    break;  case 2:    while(1)    {      printf("=========欢迎%s老师=========/n",Account);      puts("[1]查询学生选课信息");  //       puts("[2]添加老师课程信息");  //       puts("[3]删除老师课程信息");  //      puts("[4]返回主页面");      printf("【请选择】");      scanf("%d",&in);      if(4 == in)      {        return; // 返回上层登录页面      }      Teacher_Mng(pTeacher,Account, in);    }    //puts("[4]");    break;  case 3:    printf("=========欢迎%s同志=========/n",Account);    puts("[1]查询学生所选课程信息");    puts("[2]修改选课信息");    puts("[3]返回主页面");    scanf("%d",&in);    Manager_Mng(Account, in);    //puts("[4]");    break;  default:    puts("异常!");    break;  }}/* 验证账号密码 */void checkAccountandPassword(TotalNode *phead ,char *Account, char *Password,int n){  while(1)  {    gets(Account);    /**/    if(0 == strcmp(Account,"wantin"))    {      while(1)      {        printf("请输入密码:");        gets(Password);        if(0 == strcmp(Password,"123456"))        {          display_Detailed(phead,Account, n);          return;        }      }    }    else    {      printf("请输入账号:");    }  }}/* 校验学生、教师、管理员的账号 密码 */void checkPerson_Msg(TotalNode *phead , int n){  switch(n)  {    case 1: // 学生登录  char studentAccount[20]; char studentPassword[20];       checkAccountandPassword(phead, studentAccount,studentPassword,n);      break;    case 2: // 教师登录  char teacherAccount[20]; char teacherPassword[20];         checkAccountandPassword(phead, teacherAccount,teacherPassword,n);      break;    case 3: // 管理员登录 char managerAccount[20]; char managerPassword[20];          checkAccountandPassword(phead, managerAccount,managerPassword,n);      break;    default:      puts("异常!");      break;  }}/* */void main(){  TotalNode *phead=NULL;  display(phead);}

大家可以根据下面的操作来帮助读懂这段代码。

操作结果如下:

=========请选择登录页面=========
[1]学生登录
[2]教师登录
[3]管理员登录
[4]退出系统
【请选择】2
=========欢迎登录教师系统=========
请输入账号和密码
请输入账号:wantin
请输入密码:123456
=========欢迎wantin老师=========
[1]查询学生选课信息
[2]添加老师课程信息
[3]删除老师课程信息
[4]返回主页面
【请选择】2
请输入课程代码:123
请输入课程名称:C语言
请输入课程教师:王艇
添加成功!
=========欢迎wantin老师=========
[1]查询学生选课信息
[2]添加老师课程信息
[3]删除老师课程信息
[4]返回主页面
【请选择】2
请输入课程代码:456
请输入课程名称:Java
请输入课程教师:王艇
添加成功!
=========欢迎wantin老师=========
[1]查询学生选课信息
[2]添加老师课程信息
[3]删除老师课程信息
[4]返回主页面
【请选择】2
请输入课程代码:789
请输入课程名称:PHP
请输入课程教师:王艇
添加成功!
=========欢迎wantin老师=========
[1]查询学生选课信息
[2]添加老师课程信息
[3]删除老师课程信息
[4]返回主页面
【请选择】1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
课程代码:123    课程名称:C语言  课程老师:王艇   选课学生:0
课程代码:456    课程名称:Java   课程老师:王艇   选课学生:0
课程代码:789    课程名称:PHP    课程老师:王艇   选课学生:0
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

=========欢迎wantin老师=========
[1]查询学生选课信息
[2]添加老师课程信息
[3]删除老师课程信息
[4]返回主页面
【请选择】4
=========请选择登录页面=========
[1]学生登录
[2]教师登录
[3]管理员登录
[4]退出系统
【请选择】1
=========欢迎登录学生系统=========
请输入账号和密码
请输入账号:wantin
请输入密码:123456
=========欢迎wantin同学=========
[1]查询已选课程
[2]添加课程
[3]删除所选课程
[4]返回主页面
【请选择】1
******所选课程信息******
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
请输入所要查询人的姓名:王艇
没有该学生选课信息!!!!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

=========欢迎wantin同学=========
[1]查询已选课程
[2]添加课程
[3]删除所选课程
[4]返回主页面
【请选择】3
【输入学生姓名】王艇
【请输入删除的课程代码】123
删除失败!!!!
=========欢迎wantin同学=========
[1]查询已选课程
[2]添加课程
[3]删除所选课程
[4]返回主页面
【请选择】2
【请输入正确的课程代码】123
请输入学号:110
请输入姓名:王艇
请输入性别:男
选课成功!!!!
=========欢迎wantin同学=========
[1]查询已选课程
[2]添加课程
[3]删除所选课程
[4]返回主页面
【请选择】1
******所选课程信息******
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
请输入所要查询人的姓名:王艇
课程代码:123    课程名称:C语言  课程老师:王艇   选课学生:1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

=========欢迎wantin同学=========
[1]查询已选课程
[2]添加课程
[3]删除所选课程
[4]返回主页面
【请选择】4
=========请选择登录页面=========
[1]学生登录
[2]教师登录
[3]管理员登录
[4]退出系统
【请选择】2
=========欢迎登录教师系统=========
请输入账号和密码
请输入账号:wantin
请输入密码:123456
=========欢迎wantin老师=========
[1]查询学生选课信息
[2]添加老师课程信息
[3]删除老师课程信息
[4]返回主页面
【请选择】1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
课程代码:123    课程名称:C语言  课程老师:王艇   选课学生:1
课程代码:456    课程名称:Java   课程老师:王艇   选课学生:0
课程代码:789    课程名称:PHP    课程老师:王艇   选课学生:0
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

=========欢迎wantin老师=========
[1]查询学生选课信息
[2]添加老师课程信息
[3]删除老师课程信息
[4]返回主页面
【请选择】4
=========请选择登录页面=========
[1]学生登录
[2]教师登录
[3]管理员登录
[4]退出系统
【请选择】1
=========欢迎登录学生系统=========
请输入账号和密码
请输入账号:wantin
请输入密码:123456
=========欢迎wantin同学=========
[1]查询已选课程
[2]添加课程
[3]删除所选课程
[4]返回主页面
【请选择】2
【请输入正确的课程代码】456
请输入学号:110
请输入姓名:王艇
请输入性别:男
选课成功!!!!
=========欢迎wantin同学=========
[1]查询已选课程
[2]添加课程
[3]删除所选课程
[4]返回主页面
【请选择】1
******所选课程信息******
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
请输入所要查询人的姓名:王艇
课程代码:123    课程名称:C语言  课程老师:王艇   选课学生:1
课程代码:456    课程名称:Java   课程老师:王艇   选课学生:1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

=========欢迎wantin同学=========
[1]查询已选课程
[2]添加课程
[3]删除所选课程
[4]返回主页面
【请选择】2
【请输入正确的课程代码】123
请输入学号:112
请输入姓名:王五
请输入性别:男
选课成功!!!!
=========欢迎wantin同学=========
[1]查询已选课程
[2]添加课程
[3]删除所选课程
[4]返回主页面
【请选择】1
******所选课程信息******
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
请输入所要查询人的姓名:王艇
课程代码:123    课程名称:C语言  课程老师:王艇   选课学生:2
课程代码:456    课程名称:Java   课程老师:王艇   选课学生:1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

=========欢迎wantin同学=========
[1]查询已选课程
[2]添加课程
[3]删除所选课程
[4]返回主页面
【请选择】1
******所选课程信息******
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
请输入所要查询人的姓名:王五
课程代码:123    课程名称:C语言  课程老师:王艇   选课学生:2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

=========欢迎wantin同学=========
[1]查询已选课程
[2]添加课程
[3]删除所选课程
[4]返回主页面
【请选择】4
=========请选择登录页面=========
[1]学生登录
[2]教师登录
[3]管理员登录
[4]退出系统
【请选择】2
=========欢迎登录教师系统=========
请输入账号和密码
请输入账号:wantin
请输入密码:123456
=========欢迎wantin老师=========
[1]查询学生选课信息
[2]添加老师课程信息
[3]删除老师课程信息
[4]返回主页面
【请选择】1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
课程代码:123    课程名称:C语言  课程老师:王艇   选课学生:2
课程代码:456    课程名称:Java   课程老师:王艇   选课学生:1
课程代码:789    课程名称:PHP    课程老师:王艇   选课学生:0
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

=========欢迎wantin老师=========
[1]查询学生选课信息
[2]添加老师课程信息
[3]删除老师课程信息
[4]返回主页面
【请选择】

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选