You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

297 lines
6.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void menu();//定义系统菜单界面函数
void teacher_login();//老师登陆界面函数
void student_login();//学生登陆界面函数
void login();//登陆学生选课系统总界面
void out();//退出系统
void search();//课程查询
void look();//课程浏览
void select();//课程挑选
void put_course();//由老师首先输入课程的信息
struct course
{
int course_num;//课程编号
char course_name[10];//课程名字
char course_sore[10];//网上授课或教室授课
int course_score;//课程学分
int course_classtime;//授课学时
int course_programtime;//实验学时
int course_count;//课程已报人数
};
void out()
{
exit(0);
}//退出系统函数
void menu()//学生选课系统总界面
{
printf("********************************\n");
printf("欢迎来到湖南工业大学学生选课系统\n");
printf("********************************\n");
printf("按任意键进行\n");
getchar();
}
void login()//登陆界面
{
void teacher_login();
void student_login();
int q;
do
{
printf("学生登陆请按:1\n");
printf("老师登陆请按:2\n");
printf("退出系统请按:3\n");
scanf("%d",&q);
if(q!=1&&q!=2&&q!=3)
{
printf("输入错误\n");
printf("请按任意键进行\n");
getchar();
getchar();
}
if(q==3)
out();//退出系统
switch(q)
{
case 1:student_login();break;
case 2:teacher_login();break;
}
}while(q!=1&&q!=2&&q!=3);
}
void teacher_login()//老师
{
void search();
void look();
int e;
do
{
printf("课程查询请按1\n");
printf("课程浏览请按2\n");
printf("课程信息输入3\n");
printf("退出请按4\n");
scanf("%d",&e);
if(e!=1&&e!=2&&e!=3&&e!=4)
{
printf("输入错误\n");
printf("请按任意进行\n");
getchar();
}
else if(e==4)
out ();
else if(e==1||e==2)
{
switch(e)
{
case 1:search();break;
case 2:look();break;
}
}
else if(e==3)
put_course();
}while(e!=1&&e!=2&&e!=3&&e!=4);
}
void student_login()//学生
{
void out();
void search();
void look();
void select();
int w;
do
{
printf("课程挑选请按1\n");
printf("课程浏览请按2\n");
printf("课程查询请按3\n");
printf("退出请按4\n");
scanf("%d",&w);
if(w!=1&&w!=2&&w!=3&&w!=4)
{
printf("输入数据错误\n");
printf("请按任意键进行\n");
getchar();
getchar();
}
if(w==4)
exit(0);
switch(w)
{
case 1:select();break;
case 2:look();break;
case 3:search();break;
case 4:out();break;
}
}while(w!=1&&w!=2&&w!=3&&w!=4);
}
void select()//学生选课函数
{
FILE *fp1;//储存课程的文件
int i=0,temp=0,n,j,r,t,y;
struct course courses[5];
if((fp1=fopen("course.txt","rb"))==NULL)//把存储课程的文件首地址赋给文件指针fp1
{
printf("文件打开错误\n");
printf("按任意键返回\n");
getchar();
getchar();
student_login();
}
do
{
fread(&courses[i],sizeof(struct course),1,fp1);//把文件的数据读到结构体中储存起来
i+=1;
}while(!feof(fp1));
fclose(fp1);
printf("输入你选择的课程编号:限1,2,3,4,5\n");//请输入1,2,3,4,5
scanf("%d",&n);
for(j=0;j<5;j++)
if(n==courses[j].course_num)
{
temp+=1;
t=j;
break;
}
if(temp==0)
{
printf("不存在输入课程号对应的课程\n");
printf("如果继续进行请按1 返回请按2 \n");
scanf("%d",&r);
switch(r)
{
case 1:select();break;
case 2:student_login();break;
default:printf("输入错误,结束程序\n");exit(0);
}
}
else
{
courses[t].course_count+=1;//进行学生选课的人数统计
printf("选课成功,请注意通知,按时参加课程!\n");
getchar();
getchar();
}
fp1=fopen("course.txt","wb");
for(y=0;y<5;y++)
{
fwrite(&courses[y],sizeof(struct course),1,fp1);//把学生选课情况录到文件中
}
fclose(fp1);
}
void look()//课程浏览函数 ,输出各个课程的信息
{
struct course courses[5];
FILE *fp2;
int i=0,j;
if((fp2=fopen("course.txt","rb"))==NULL)
{
printf("文件打开错误\n");
printf("按任意键进行\n");
getchar();
exit(0);
}
do
{
fread(&courses[i],sizeof(struct course),1,fp2);
i+=1;
}while(!feof(fp2));
for(j=0;j<5;j++)
{
printf("课程编号:%d\n",courses[j].course_num);
printf("课程名字:%s\n",courses[j].course_name);
printf("课程类型:%s\n",courses[j].course_sore);
printf("课程学分:%d\n",courses[j].course_score);
printf("授课学时:%d\n",courses[j].course_classtime);
printf("实验学时:%d\n",courses[j].course_programtime);
printf("课程已报人数:%d\n\n",courses[j].course_count);
}
fclose(fp2);
getchar();
getchar();
}
void search()//课程查询函数
{
FILE *fp3;
int num;
struct course courses[5];
int i=0,j;
printf("请输入需要查询的课程的编号:限1,2,3,4,5\n");//请输入1,2,3,4,5
scanf("%d",&num);
if(num!=1&&num!=2&&num!=3&&num!=4&&num!=5)
{
printf("输入错误!按任意键返回\n");
getchar();
getchar();
search();
}
if((fp3=fopen("course.txt","rb"))==NULL)
{
printf("文件打开错误\n");
printf("按任意键进行\n");
getchar();
exit(0);
}
do
{
fread(&courses[i],sizeof(struct course),1,fp3);
i+=1;
}while(!feof(fp3));
fclose(fp3);
for(j=0;j<5;j++)
if(courses[j].course_num==num)
{
printf("课程编号:%d\n",courses[j].course_num);
printf("课程名字:%s\n",courses[j].course_name);
printf("课程类型:%s\n",courses[j].course_sore);
printf("课程学分:%d\n",courses[j].course_score);
printf("授课学时:%d\n",courses[j].course_classtime);
printf("实验学时:%d\n",courses[j].course_programtime);
printf("课程已报人数:%d\n",courses[j].course_count);
break;
}
getchar();
getchar();
}
void put_course()
{
FILE *fp;
struct course courses[5];
printf("老师向数据库文件输入五组课程数据。例如: \n");
printf("1 体适能 教室授课 5 30 3 0\n");
printf("2 英语 网上授课 5 30 5 0\n");
printf("3 湖南青马 网上授课 5 30 5 0\n");
printf("4 心理学 网上授课 5 30 5 0\n");
printf("5 心理健康 教室授课 5 30 5 0\n");
printf("有五次输入注意每个成员间用空格隔开刚输入时把已报人数设为0输入一个结构体数组按回车键\n");
printf("数据依次代表:编号,名字,方式,学分,授课学时,实验学时,已报人数\n");
printf("老师测试时为节省时间可以把上面5组数据样例复制作为输入在进行其他测试\n");
int j;
for(j=0;j<5;j++)
{
scanf("%d%s%s%d%d%d%d",&courses[j].course_num,courses[j].course_name,courses[j].course_sore,&courses[j].course_score,&courses[j].course_classtime,&courses[j].course_programtime,&courses[j].course_count);
}
int i;
if((fp=fopen("course.txt","wb"))==NULL)
{
printf("文件打开错误\n");
printf("按任意键进行\n");
getchar();
exit(0);
}
for(i=0;i<5;i++)
{
fwrite(&courses[i],sizeof(struct course),1,fp);
}
fclose(fp);
printf("课程信息输入成功\n");
getchar();
getchar();
}
int main()//主函数
{
menu();
printf("老师首次登陆时,点击老师选项,应输入课程信息,学生禁止点击\n");
login();
return 0;
}