📄 xuankexitong.c
字号:
#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 + -