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.

745 lines
23 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.

int main(void){
//进入欢迎界面
system("color f3");
home();
return 0;
}
//欢迎界面
void home(void) {
printf("\n-------------------------欢迎进入湖南工业大学学生选课系统!----------------------");
int h;
printf("\n\n 请选择你要进行的操作:");
printf("\n\n 1.学生操作");
printf("\n 2.课程操作");
printf("\n 3.开始选课");
printf("\n 4.选课统计");
printf("\n 5.退出系统");
printf("\n ");
printf("\n 请输入:");
scanf("%d",&h);
system("cls");
switch(h){
case 1:
stu_operate();
break;
case 2:
cou_operate();
break;
case 3:
choose();
break;
case 4:
statistic();
break;
default:
system("cls");
printf("BYE!");
break;
}
}
/*开始选课*/
void choose(void){
char stu_id[10],cou_id[10];
printf("\n-------------------------欢迎进入湖南工业大学学生选课系统!----------------------");
//输入选课学生信息
printf("\n\n 请输入选课人学号:");
fflush(stdin);
scanf("%s",stu_id);
int h,flag = 0;
for(h = 0;h <= i;h++){
if(strcmp(stu[h].stu_ID,stu_id)==0){
flag = 0;
break;
} else {
flag = 1;
}
}
if(flag||i==-1){
printf("\n 不存在此学号\n");
system("pause");
system("cls");
home();
}
//录入姓名信息
x++;
sel[x].s = h;
//输入课程信息
printf("\n\n 请输入选修课程号:");
fflush(stdin);
scanf("%s",cou_id);
flag = 0;
for(h = 0;h <= j;h++){
if(strcmp(cou[h].course_ID,cou_id)==0){
flag = 0;
break;
} else {
flag = 1;
}
}
if(flag||j==-1){
printf("\n 不存在此课程号\n");
x--;
system("pause");
system("cls");
home();
}
//录入课程信息
sel[x].c = h;
cou[h].people++;
printf("\n 录入成功!\n");
system("pause");
system("cls");
home();
}
/*删除选课记录*/
void delete_sel(int q){//删除第q+1条记录
/*注意本函数没有将x减1请在函数外手动减1考虑外层函数循环的需要*/
int h;
cou[sel[q].c].people--;
for(h = q;q < x;h++){
q++;
sel[h].c = sel[q].c;
sel[h].s = sel[q].s;
}
}
//对学生记录进行操作
void stu_operate(void) {
printf("\n-------------------------欢迎进入湖南工业大学学生选课系统!----------------------");
printf("\n\n 请选择你要对学生记录进行的操作:");
printf("\n\n 1.添加");
printf("\n 2.查询");
printf("\n 3.显示");
printf("\n 4.返回主页面");
printf("\n ");
printf("\n 请输入:");
int i;
scanf("%d",&i);
system("cls");
switch(i){
case 1://添加学生信息
input_stu();
break;
case 2://查询学生信息
search_stu();
break;
case 3://显示所有学生信息
show_stu();
break;
case 4:
home();
break;
}
}
//对课程记录进行操作
void cou_operate(void) {
printf("\n-------------------------欢迎进入湖南工业大学学生选课系统!----------------------");
printf("\n\n 请选择你要对课程记录进行的操作:");
printf("\n\n 1.添加");
printf("\n 2.查询");
printf("\n 3.显示");
printf("\n 4.返回主页面");
printf("\n ");
printf("\n 请输入:");
int i;
scanf("%d",&i);
system("cls");
switch(i){
case 1:
input_cou();
break;
case 2:
search_cou();
break;
case 3:
show_cou();
case 4:
home();
break;
}
}
//选课信息统计记录
void statistic(void){
printf("\n-------------------------欢迎进入湖南工业大学学生选课系统!----------------------");
printf("\n\n 共有学生信息:%d 条",i+1);
printf("\n 共有课程信息:%d 条",j+1);
if(x == -1){
printf("\n 选课记录0 条");
printf("\n\n ");
system("pause");
system("cls");
home();
} else {
printf("\n\n 选课记录 %d 条:",x+1);
int m;
for(m = 0;m <= x;m++){
printf("\n ================");
printf("\n 第%d条",m+1);
printf("\n 学生学号:%s",stu[sel[m].s].stu_ID);
printf("\n 学生姓名:%s",stu[sel[m].s].stu_name);
printf("\n 课程号:%s",cou[sel[m].c].course_ID);
printf("\n 课程名:%s",cou[sel[m].c].course_name);
}
printf("\n\n ");
system("pause");
system("cls");
home();
}
}
//--------------------------------------学生信息插入--------------------------------------
void input_stu(void){
char flag;
FILE * fp;
//--判断文件是否为空
fp = fopen("student.txt","r+");
flag = fgetc(fp);
if(flag==EOF){
fprintf(fp,"学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
}
fclose(fp);
//--
fp = fopen("student.txt","a+");
if(fp == NULL){
printf("打开文件失败!");
system("cls");
stu_operate();
}
printf("学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
while(1){
i++;
scanf("%s %s %s %s %s %s %s",&stu[i].stu_ID,&stu[i].stu_name,&stu[i].sex,&stu[i].age,&stu[i].collage,&stu[i].grade,&stu[i].contact);
//--数据查重
int h;
for(h = 0;h < i;h++){
if(i == 0) break;//第一条数据不需要查重
if (strcmp(stu[h].stu_ID,stu[i].stu_ID)==0) {
printf("该学号已存在,请重新输入!\n");
scanf("\n%s %s %s %s %s %s %s",&stu[i].stu_ID,&stu[i].stu_name,&stu[i].sex,&stu[i].age,&stu[i].collage,&stu[i].grade,&stu[i].contact);
h = -1;
}
}
//--
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[i].stu_ID,stu[i].stu_name,stu[i].sex,stu[i].age,stu[i].collage,stu[i].grade,stu[i].contact);
printf("\n录入成功继续录入输入y返回上一级请按任意键");
fflush(stdin);
scanf("%c",&flag);
fclose(fp);
if(flag!='y'&&'Y') break;
fp = fopen("student.txt","a");
}
renew_stu();
system("cls");
stu_operate();
}
/*查询学生信息*/
void search_stu(void){
system("cls");
printf("\n请选择查询方式:");
printf("\n 1.学号查询");
printf("\n 2.姓名查询");
printf("\n请选择:");
int h;
scanf(" %d",&h);
switch(h){
case 1:
search_stu_id();
break;
case 2:
search_stu_name();
break;
}
}
/*学号查询*/
void search_stu_id(void){
system("cls");
char id[9];
printf("\n输入学生的学号:");
fflush(stdin);
scanf("%s",id);
int h;
for(h = 0;h <= i;h++){
if(strcmp(stu[h].stu_ID,id)==0){
system("cls");
printf("查找成功!");
printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
printf("\n\t-----------------------------------------------------------------");
printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
system("pause");
system("cls");
stu_operate();
}
}
system("cls");
printf("没有此学号!\n");
system("pause");
system("cls");
stu_operate();
}
/*姓名查询*/
void search_stu_name(void){
system("cls");
char name[9];
printf("\n输入学生的姓名:");
fflush(stdin);
scanf("%s",name);
int h;
for(h = 0;h <= i;h++){
if(strcmp(stu[h].stu_name,name)==0){
system("cls");
printf("查找成功!");
printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
printf("\n\t---------------------------------------------------------");
printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
system("pause");
system("cls");
stu_operate();
}
}
system("cls");
printf("没有此姓名!");
system("pause");
system("cls");
stu_operate();
}
/*显示所有学生信息*/
void show_stu(void){
int h;
if(i == -1){
printf("\n还没有录入信息!\n");
system("pause");
system("cls");
stu_operate();
}
system("cls");
printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
printf("\n\t---------------------------------------------------------");
for(h = 0;h <= i;h++){
printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
}
//
fflush(stdin);
printf("\n\t1.修改");
printf("\n\t2.删除");
printf("\n\t3.返回");
printf("\n\n 选择要进行的操作:");
int flag;
fflush(stdin);
scanf("%d",&flag);
switch(flag){
case 1:
edit_stu();
break;
case 2:
delete_stu();
break;
default:
system("cls");
stu_operate();
break;
}
}
/*编辑学生信息*/
void edit_stu(void){
printf("\n输入需要编辑的学生的学号:");
char id[10];
getchar();
scanf("%s",id);
int h;
for(h = 0;h <= i;h++){
if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行
system("cls");
printf("\n\n\t学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式");
printf("\n\t---------------------------------------------------------");
printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
printf("\n这是修改前的数据,请依次输入修改值:\n\t");
fflush(stdin);
scanf("%s %s %s %s %s %s %s",&stu[h].stu_ID,&stu[h].stu_name,&stu[h].sex,&stu[h].age,&stu[h].collage,&stu[h].grade,&stu[h].contact);
int k;
for(k = 0;k <= i;k++){
if(strcmp(stu[k].stu_ID,stu[h].stu_ID)==0){
if(k==h){
continue;
} else {//学号不唯一
printf("\n此学号已存在!重新输入学号:");
fflush(stdin);
scanf("%s",&stu[h].stu_ID);
k = -1;
}
}
}
/*将修改信息写入文件*/
//思想:将原文件重新写入一遍
renew_stu();
system("cls");
printf("修改成功!\n");
system("pause");
system("cls");
stu_operate();
}
}
printf("\n此学号不存在!\n");
system("pause");
system("cls");
stu_operate();
}
/*删除学生信息*/
void delete_stu(void){
printf("\n输入需要编辑的学生的学号:");
char id[10];
getchar();
scanf("%s",id);
int h;
for(h = 0;h <= i;h++){
if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行
system("cls");
//检查他/她是否选课了
int a;
for(a = 0;a <= x;a++){
if(h==sel[a].s){//选课了则将对应课程记录减1,以及选课数组减1
delete_sel(a);
a = -1;
x--;
continue;
}
}
//如果只有一条记录
if(i==0){
i = -1;
renew_stu();
printf("修改成功!\n");
system("pause");
system("cls");
stu_operate();
}
int k;
for(k = h+1;k <= i;k++,h++){//将数组直接向前移动
strcpy(stu[h].stu_ID,stu[k].stu_ID);
strcpy(stu[h].stu_name,stu[k].stu_name);
strcpy(stu[h].sex,stu[k].sex);
strcpy(stu[h].grade,stu[k].grade);
strcpy(stu[h].contact,stu[k].contact);
strcpy(stu[h].collage,stu[k].collage);
strcpy(stu[h].age,stu[k].age);
}
/*将修改信息写入文件*/
//思想:将原文件重新写入一遍
renew_stu();
i--;
system("cls");
printf("修改成功!\n");
system("pause");
system("cls");
stu_operate();
}
}
printf("\n此学号不存在!\n");
system("pause");
system("cls");
stu_operate();
}
//--------------------------------------课程信息插入--------------------------------------
void input_cou(void){
char flag;
FILE * fp;
//--判断文件是否为空
fp = fopen("course.txt","r+");
flag = fgetc(fp);
if(flag==EOF){
fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n");
}
fclose(fp);
//--
fp = fopen("course.txt","a+");
if(fp == NULL){
printf("打开文件失败!");
system("cls");
cou_operate();
}
printf("代码\t名称\t性质\t总学时\t学分\t开课学期\n");
while(1){
j++;
scanf("%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time);
//--数据查重
int h;
for(h = 0;h < j;h++){
if(j == 0) break;//第一条数据不需要查重
if (strcmp(cou[h].course_ID,cou[j].course_ID)==0) {
printf("该课程号已存在,请重新输入!\n");
scanf("\n%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time);
h = -1;
}
}
//--
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[j].course_ID,cou[j].course_name,cou[j].property,cou[j].period,cou[j].credit,cou[j].time,cou[j].people);
printf("\n录入成功继续录入输入y返回上一级请按任意键");
fflush(stdin);
scanf("%c",&flag);
fclose(fp);
if(flag!='y'&&'Y') break;
fp = fopen("course.txt","a");
}
renew_cou();
system("cls");
cou_operate();
}
/*查询课程信息*/
void search_cou(void){
system("cls");
printf("\n请选择查询方式:");
printf("\n 1.课程号查询");
printf("\n 2.课程名查询");
printf("\n请选择:");
int h;
scanf(" %d",&h);
switch(h){
case 1:
search_cou_id();
break;
case 2:
search_cou_name();
break;
}
}
/*课程号查询*/
void search_cou_id(void){
system("cls");
char id[9];
printf("\n输入课程号:");
fflush(stdin);
scanf("%s",id);
int h;
for(h = 0;h <= j;h++){
if(strcmp(cou[h].course_ID,id)==0){
system("cls");
printf("查找成功!");
printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
printf("\n\t-----------------------------------------------------------------");
printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
system("pause");
system("cls");
cou_operate();
}
}
system("cls");
printf("没有此课程号!\n");
system("pause");
system("cls");
cou_operate();
}
/*课程名查询*/
void search_cou_name(void){
system("cls");
char name[9];
printf("\n输入课程名:");
fflush(stdin);
scanf("%s",name);
int h;
for(h = 0;h <= j;h++){
if(strcmp(cou[h].course_name,name)==0){
system("cls");
printf("查找成功!");
printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
printf("\n\t---------------------------------------------------------");
printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
system("pause");
system("cls");
cou_operate();
}
}
system("cls");
printf("没有此课程名!");
system("pause");
system("cls");
cou_operate();
}
/*显示所有课程信息*/
void show_cou(void){
int h;
if(j == -1){
printf("\n还没有录入信息!\n");
system("pause");
system("cls");
cou_operate();
}
system("cls");
printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
printf("\n\t-------------------------------------------------------------");
for(h = 0;h <= j;h++){
printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
}
//
fflush(stdin);
printf("\n\t1.修改");
printf("\n\t2.删除");
printf("\n\t3.返回");
printf("\n\n 选择要进行的操作:");
int flag;
fflush(stdin);
scanf("%d",&flag);
switch(flag){
case 1:
edit_cou();
break;
case 2:
delete_cou();
break;
default:
system("cls");
cou_operate();
break;
}
}
/*编辑课程信息*/
void edit_cou(void){
printf("\n输入需要编辑的课程号:");
char id[10];
getchar();
scanf("%s",id);
int h;
for(h = 0;h <= j;h++){
if(strcmp(cou[h].course_ID,id)==0){//找到需要编辑的行
system("cls");
printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期");
printf("\n\t-------------------------------------------------------------");
printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time);
printf("\n这是修改前的数据,请依次输入修改值:\n\t");
fflush(stdin);
scanf("%s %s %s %s %s %s",&cou[h].course_ID,&cou[h].course_name,&cou[h].property,&cou[h].period,&cou[h].credit,&cou[h].time);
int k;
for(k = 0;k <= j;k++){
if(strcmp(cou[k].course_ID,cou[h].course_ID)==0){
if(k==h){
continue;
} else {//课程号不唯一
printf("\n此课程号已存在,重新输入:");
fflush(stdin);
scanf("%s",&cou[h].course_ID);
k = -1;
}
}
}
/*将修改信息写入文件*/
//思想:将原文件重新写入一遍
renew_cou();
system("cls");
printf("修改成功!\n");
system("pause");
system("cls");
cou_operate();
}
}
printf("\n此课程号不存在!\n");
system("pause");
system("cls");
cou_operate();
}
/*删除课程信息*/
void delete_cou(void){
printf("\n输入需要编辑的课程号:");
char id[10];
getchar();
scanf("%s",id);
int h;
for(h = 0;h <= j;h++){
if(strcmp(cou[h].course_ID,id)==0){//找到需要编辑的行
system("cls");
//如果只有一条记录
if(j==0){
j = -1;
renew_cou();
printf("修改成功!\n");
system("pause");
system("cls");
cou_operate();
}
//查看是否有人选课
if(cou[h].people!=0){//有人选课时
int a;
for(a = 0;a <= x;a++){
if(sel[a].c == h){
delete_sel(a);
a = -1;
x--;
continue;
}
}
}
int k;
for(k = h+1;k <= j;k++,h++){//将数组直接向前移动
strcpy(cou[h].course_ID,cou[k].course_ID);
strcpy(cou[h].course_name,cou[k].course_name);
strcpy(cou[h].property,cou[k].property);
strcpy(cou[h].period,cou[k].period);
strcpy(cou[h].credit,cou[k].credit);
strcpy(cou[h].time,cou[k].time);
}
/*将修改信息写入文件*/
//思想:将原文件重新写入一遍
renew_cou();
j--;
system("cls");
printf("修改成功!\n");
system("pause");
system("cls");
cou_operate();
}
}
printf("\n此课程号不存在!\n");
system("pause");
system("cls");
cou_operate();
}
//--功能函数
/*更新系统数据至文件*/
void renew_stu(void){
FILE * fp;
fp = fopen("student.txt","w+");
if(fp == NULL){
printf("\n打开文件失败,无法保存至文件。\n");
fclose(fp);
return ;
}
fprintf(fp,"学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
if(i == -1){
fclose(fp);
return;
}
int h;
for(h = 0;h <= i;h++){
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
}
fclose(fp);
}
void renew_cou(void){
FILE * fp;
fp = fopen("course.txt","w+");
if(fp == NULL){
printf("\n打开文件失败,无法保存至文件。\n");
fclose(fp);
return ;
}
fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n");
if(j == -1){
fclose(fp);
return;
}
int h;
for(h = 0;h <= j;h++){
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t\t%s\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people); }
fclose(fp);
}