学生选课管理系统
设计一个学生选课管理系统。设计要求:(1)用户登录功能(包括老师用户与学生用户);(2)设计程序运行界面;(3)能用菜单选择各功能;(4)所有信息以文件的形式保存。
功能要求:
1、教师用户功能:
(1)输入课程信息,数据要求:课程编号、课程名、任课教师、课程针对专业,最大容纳选课人数;
(2)课程信息管理,对课程信息进行修改、删除、查询操作;
(3)查看学生选课情况(该教师)。
2、学生用户功能:
(1)输入学生信息询,数据要求:学号、姓名、所在学院、专业、班级;
(2)学生信息管理,对自己信息进行修改、删除、查询操作;
(3)学生选课,先查询所能选的课程,再进行选课,输入学号、课程进行选课;
(4)浏览自己选课情况,数据要求:学号、姓名、课程号、课程名、任课老师。
其他要求:
(1)编程使用C语言
(2)采用菜单界面
(3)学生可自动增加新功能模块(视情况可另加分)
————————————————————————————
下面是我自己写的代码,由于时间仓促,其中有很多的不足之处;同时,由于我初学C语言,只是会一些简单浅显的基础知识,所以有很多地方、很多功能的实现,代码很是繁琐麻烦。我就厚着脸皮抛砖引玉了,希望各位大佬能够留言进行指点,万分感谢!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
struct id//账号密码结构体
{
char zh[20];//账号 。
char mm[20];//密码。
};
struct lessons//课程信息结构体。
{
int num; // 课程编号。
char lesson_name[50]; //课程名。
char teacher[50]; //任课教师。
char zhuanye[50]; //课程针对专业。
int people; //最大容纳选课人数。
int n; // 选择这门课程的人数。
};
struct stu//学生个人信息结构体
{
char num[20];//学号
char name[30];//姓名
char xueyuan[50];//学院
char zhuanye[50];//专业
int clas;//班级
int n;//选课数量。
};
struct stu_xk//学生选课结构体
{
char xh[30];//学号
char name[40];//姓名
int num;//课程编号。
char lesson_name[50]; //课程名
char teacher[30];//任课老师
};
/* 账号数据管理模块 */
/*账号数据储存模块*/
void Create_File_stu();//创建储存学生的文件。
void Create_File_teacher();//创建储存学生的文件。
/*账号注册模块*/
void newid();//选择注册账号的身份(学生还是教师)
void new_stu_id();//学生注册新用户。
void new_teacher_id(); //教师注册新用户。
/* 登录方式*/
void teacher();//老师登录。
void student();//学生登录。
void init();//用户选择。
void fstprint();//界面菜单显示
/* 教师用户功能模块 */
void select();//教师进行功能选择。
void put_in ();/*输入课程信息模块*/
void select_2();//输入课程信息的返回功能函数
void Create_File_flog();//创建存储课程编号的文件。
void upon(int a);//上传 课程编号信息
int downlod();//读取课程编号
void Create_File_lesson();//创建保存课程信息的数据库。
void change(); //课程信息管理,对课程信息进行修改、删除、查询操作
void modify();//修改课程信息。
void read();//查询输入的课程信息。
void delet();//删除课程信息。
void select_3() ; //具有返回功能的函数
void read_1();//查看学生选课情况(该教师)。
void see() ; //选择精确查询方式。
void see_1(); //按课程编号精确查询。
/*学生功能模块*/
void Create_stuxx();//建立储存学生信息的数据库。
void stu_slect();//学生进行功能选择。
void in_stuxx ();//学生输入个人信息。
void see_stuxx();//浏览自己选课情况
void change_stuxx();//学生信息管理功能选择。
void stu_modify();//修改学生个人信息。
void stu_delete();//删除功能。
void stu_chaxun();//查询个人基本信息。
void stu_xk_1();//学生选课。
int pd2(int n);//判断选择的课程是否达到最大容纳量。
int pd1(char xh[]);//判断学生选课是否达到上限。
int pd3(int n);//判断专业是否匹配。
void xk_1() ;// //学生选课,先查询所能选的课程
/*全局变量*/
int s=0,t=0;
/*主函数*/
int main()
{
Create_File_stu();
Create_File_teacher();
fstprint();//登录界面。
init();//用户选择登录模式。
return 0;
}
/*账号数据储存模块*/
void Create_File_stu() /*创建储存学生用户账号密码的文件*/
{
FILE *fp;
if ((fp = fopen("studentusers.txt","r"))==NULL) /*如果此文件不存在*/
{
if ((fp = fopen("studentusers.txt","w+"))==NULL)
{
printf("无法建立文件!\n");
exit(0);
}
}
}
void Create_File_teacher() /*创建储存学生用户账号密码的文件*/
{
FILE *fp;
if ((fp = fopen("teacherusers.txt","r"))==NULL) /*如果此文件不存在*/
{
if ((fp = fopen("teacherusers.txt","w+"))==NULL)
{
printf("无法建立文件!\n");
exit(0);
}
}
}
void fstprint()//登录界面。
{
system("color 3f");
system("cls");
printf("\n\n\n");
printf("\t*******************************\n");
printf("\t** 学生选课管理系统 **\n");
printf("\t** 软件工程 **\n");
printf("\t** 岳跃豪 **\n");
printf("\t** 19031210233 **\n");
printf("\t*******************************\n");
printf("\n\t ┌──────────┐");
printf("\n\t │ 1.教师系统登录 │");
printf("\n\t │ 2.学生系统登录 │");
printf("\n\t │ 3.注册账号 │");
printf("\n\t └──────────┘");
}
/*系统登录模块*/
void teacher()//老师的登录
{
struct id a,b;//
system("cls");
FILE *fp;
printf("\n\n\n选课系统教师登录界面\n");
fp = fopen("teacherusers.txt","r");
fread(&b, sizeof(struct id), 1, fp); //读入一个结构体字符块 写入b
printf("\n\t\t请输入账号\n");
scanf("%s",&a.zh);
while (1)
{
if (strcmp(a.zh, b.zh)==0) //如果有此用户名
break;
else
{
if (!feof(fp)) //如果文件没有读完
fread(&b, sizeof(struct id), 1, fp);
else
{
printf("此用户名不存在,请重新输入!\n");
Sleep(500);
fclose(fp);
return teacher();
}
}
}
printf("\t\t请输入密码\n");
scanf("%s",&a.mm);
do{
if (strcmp(a.mm, b.mm)==0) /*如果密码匹配*/
{
fclose(fp);
Sleep(500);
return select();
}
else
{
printf("\t\t密码不正确!请重新输入密码\n");
scanf("%s",&a.mm);
}
}while(strcmp(a.mm, b.mm)==0);
}
void student()//学生的登录
{
system("cls");
struct id a,b;
FILE *fp;
printf("\n\n选课系统学生登录界面\n");
Sleep(1000);
fp = fopen("studentusers.txt","r");
fread(&b, sizeof(struct id), 1, fp); //读入一个结构体字符块 写入b
printf("\n\t\t请输入账号\n");
scanf("%s",&a.zh);
while (1)
{
if (strcmp(a.zh, b.zh)==0) //如果有此用户名
break;
else
{
if (!feof(fp)) //如果文件没有读完
{
fread(&b, sizeof(struct id), 1, fp);
}
else
{
printf("此用户名不存在,请重新输入!\n");
Sleep(500);
fclose(fp);
return student();
}
}
}
printf("\t\t请输入密码\n");
scanf("%s",&a.mm);
do{
if (strcmp(a.mm, b.mm)==0) /*如果密码匹配*/
{
fclose(fp);
printf("\t\t登录成功,欢迎使用!");
Sleep(500);
return stu_slect();
}
else
{
printf("密码不正确!请重新输入密码\n");
scanf("%s",&a.mm);
}
}while(strcmp(a.mm, b.mm)==0);
}
void init()//用户进行选择登录模式。
{
printf("\n\t 请选择登录模式: ");
scanf("%d", &s); //用户输入对应数字进行选择。
if (s != 1 && s != 2&&s!=3 )
{
printf("输入有误,请重新输入:");
return init();
}
if(s==1) teacher();
if(s==2) student();
if(s==3) newid();
}
/*注册账号模块*/
void new_teacher_id()//教师注册新用户。
{
system("cls");
Create_File_teacher();
struct id a,b;
FILE *fp;
char temp[20];
int count = 0;
printf("\n\n\n\t\t\t\t新用户注册!\n");
Sleep(1000);
fp = fopen("teacherusers.txt","r");
fread(&b, sizeof(struct id), 1, fp); //读入一个结构体字符块 到b
printf("\n\t\t请输入账号\n");
scanf("%s",&a.zh);
while (1)
{
if (strcmp(a.zh, b.zh)) /*如果两串不相等*/
{
if (!feof(fp)) /*如果未到文件尾*/
{
fread(&b, sizeof(struct id), 1, fp);
}
else
break;
}
else
{
printf("\n\t此用户名已存在!请重新注册!\n");
Sleep(1000);
fclose(fp);
return newid();
}
}
printf("\t\t请输入密码\n");
scanf(" %s",&a.mm);
printf("\t\t请确认密码\n");
scanf(" %s",&temp);
do{
if(!strcmp(a.mm,temp))
{
fp = fopen("teacherusers.txt","a");
fwrite(&a, sizeof(struct id), 1, fp);
printf("\t\t账号注册成功,请登录!\n");
Sleep(500);
fclose(fp);
return teacher();
}
else
{
printf("\t\t两次密码不匹配!请重新输入!\n");
scanf("%s",&a.mm);
printf("请确认密码\n");
scanf("%s",&temp