删除c语言课程的选课信息,基于C语言的学生选课系统

#include

#include

#include

/* 总链表——存放所有信息 */

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);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言课程设计——学生信息管理系统_带数据文件版 系统的功能要求 学校现状分析 1、某学校有本科生和研究生两类学生。 A. 本科生信息:学号、姓名、性别、专业、班级、高数成绩、英语成绩、C语言、总成绩、班级排名、校级排名。其:学号、姓名、性别、专业、班级、高数成绩、英语成绩、C语言成绩为输入项,总成绩是计算项,班级排名是总成绩在班内的名次,校级排名是总成绩在校内的名次。 B. 研究生信息:学号、姓名、性别、专业、班级、课程综合成绩、论文成绩、总成绩、班级排名、校级排名。其:学号、姓名、性别、专业、班级、课程综合成绩、论文成绩为输入项,总成绩是计算项,班级排名是总成绩在班内的名次,校级排名是总成绩在校内的名次。 2、学生总成绩计算方法。 A.本科生:总成绩=高数成绩+英语成绩+C语言成绩; B.研究生:总成绩=课程综合成绩+论文成绩; 请使用结构化的程序设计方法,开发一个学生成绩管理系统对学生成绩进行有效管理。 1.2 主要任务 系统的功能要求 1. 添加功能:分本科生和研究生两类人员,实现下列添加功能。 A.本科生:能够添加学生信息,如果高数成绩、英语成绩、C语言成绩都输入,则系统自动计算总成绩。 B.研究生:能够添加学生信息,如果课程综合成绩、论文成绩都输入,则系统自动计算总成绩。 2. 修改功能:分本科生和研究生两类人员,实现下列修改功能。 A.本科生:根据学号来修改任意学生的除学号外的信息。如果高数成绩、英语成绩、c语言成绩都存在,则系统自动计算总成绩。 B.研究生:根据学号来修改任意学生的除学号外的信息。如果课程综合成绩、论文成绩都存在,则系统自动计算总成绩 3. 删除功能:分本科生和研究生两类人员,能够根据学号删除一个学生。 4. 查询功能:分本科生和研究生两类人员,实现下列查询功能。 1) 分页显示全部学生信息。分页功能:每页显示10条学生信息,有上一页、下一页、首页和最后一页的功能。 2) 能够按班级显示本班全部学生信息。 3) 能够根据学号或者姓名查询学生信息。 4) 能够在某个班级查询某门课成绩不及格学生信息。 5. 排序功能:分本科生和研究生两类人员,实现下列排序功能。 1) 所有学生信息按总成绩从高到低排序并显示。 2) 某个班学生信息按总成绩从高到低排序并显示。 6. 统计功能:分本科生和研究生两类人员,实现下列统计与显示功能。 1) 统计某班级某课程的平均成绩、最高成绩、最低成绩。如果学生该门课没有成绩,统计平均成绩时忽略该生。 2) 统计某班级某课程超过课程平均成绩的学生名单及人数。 3) 统计某班级某课程不及格学生名单及人数。 4) 统计某班级某课程不同等级的学生人数。等级标准:优—大于等于90;良—大于等于80且小于90;:大于等于70且小于80;及格:大于等于60且小于70;不及格:小于60。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值