|
|
#include "BOOKS.h"
|
|
|
|
|
|
BOOK*head_BOOK = NULL;
|
|
|
BOOK*BAR_BOOK = NULL;
|
|
|
int books()//入口
|
|
|
{
|
|
|
/*conshow_BOOK
|
|
|
*UI设置
|
|
|
*读取
|
|
|
*选择浏览或借退
|
|
|
*保存并退出
|
|
|
*/
|
|
|
in_BOOK();
|
|
|
book_function_choose();
|
|
|
save_BOOK();
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
void book_function_info(int choice)//用户功能菜单
|
|
|
{
|
|
|
Settitle("|学生选课系统|普通用户|");
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
char o[3][30] = {"浏 览 现 有 课 程 信 息","选 课 与 退 课","退 出 账 号"};
|
|
|
int i,j = 0,k=-1;
|
|
|
for(i = 0; i <= 2;i++,k++)
|
|
|
{
|
|
|
if(choice == i)
|
|
|
setcolor(0,15);
|
|
|
setposition(LB+21,START+i+k+3);
|
|
|
printf("%s",o[j++]);
|
|
|
setcolor(11,0);
|
|
|
}
|
|
|
setposition(LB,INFO+1);
|
|
|
if(strcmp(book1 , "o") == 0) {book1[0] = ' ' ; book1[1] = 0;}
|
|
|
if(strcmp(book2 , "o") == 0) {book2[0] = ' ' ; book2[1] = 0;}
|
|
|
if(strcmp(book3 , "o") == 0) {book3[0] = ' ' ; book3[1] = 0;}
|
|
|
printf("已选课程:%s %s %s",book1,book2,book3);
|
|
|
setposition(LB,INFO+2);
|
|
|
printf("(%d/3)",booknum);
|
|
|
}
|
|
|
|
|
|
void book_function_choose()//用户功能菜单的实现
|
|
|
{
|
|
|
int choice = 0;
|
|
|
while(1)
|
|
|
{
|
|
|
book_function_info(choice);
|
|
|
setposition(19,12);
|
|
|
printf("输入“↑”或“↓”,回车键确认");
|
|
|
HideCursor();
|
|
|
char a,b;
|
|
|
b = getch();
|
|
|
if(b==-32)
|
|
|
a = getch();
|
|
|
fflush(stdin);
|
|
|
if(a == UP && b == -32)
|
|
|
{
|
|
|
choice--;
|
|
|
}
|
|
|
else if(a == DOWN && b == -32)
|
|
|
{
|
|
|
choice++;
|
|
|
}
|
|
|
else if(b==13){
|
|
|
if(choice == 0)
|
|
|
conshow_BOOK_choice(0);
|
|
|
else if(choice == 1)
|
|
|
borrowandreturn_BOOK_choice(0);
|
|
|
else if(choice == 2) login1();
|
|
|
break;
|
|
|
}
|
|
|
else{
|
|
|
setposition(19,12);
|
|
|
printf("输入“↑”或“↓”,回车键确认");
|
|
|
}
|
|
|
if(choice<0) choice = 2;
|
|
|
if(choice>2) choice = 0;
|
|
|
}
|
|
|
}
|
|
|
void book_type_menu_info(int choice)//书本的课程类型菜单
|
|
|
{
|
|
|
Settitle("|学生选课系统|课程类型|");
|
|
|
system("cls");//清屏
|
|
|
showtitle();//打印提示信息
|
|
|
char o[7][14] = {" 语言类 "," 人文科学 "," 经济学 "," 策略 "," 自然科学 ","天文学"," 医学 "};//设置选项内容
|
|
|
int i,j = 0;
|
|
|
for(i = 0; i <= 6;i++)
|
|
|
{
|
|
|
if(choice == i)//如果传进来的选择与当前要打印的相同
|
|
|
setcolor(0,15);//将更改当前被选中的选项颜色
|
|
|
setposition(LB+25,START+i+1);
|
|
|
printf("%s",o[j++]);
|
|
|
setcolor(11,0);//改回来
|
|
|
}
|
|
|
}
|
|
|
|
|
|
int book_type_menu_choose()//书本的课程类型菜单的实现
|
|
|
{
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
int choice = 0;
|
|
|
while(1)
|
|
|
{
|
|
|
book_type_menu_info(choice);
|
|
|
setposition(19,12);
|
|
|
printf("输入“↑”或“↓”,回车键确认");
|
|
|
HideCursor();
|
|
|
char a,b;
|
|
|
b = getch();
|
|
|
if(b==-32)
|
|
|
a = getch();
|
|
|
fflush(stdin);
|
|
|
if(a == UP && b == -32)
|
|
|
{
|
|
|
choice--;
|
|
|
}
|
|
|
else if(a == DOWN && b == -32)
|
|
|
{
|
|
|
choice++;
|
|
|
}
|
|
|
else if(b==13){
|
|
|
return choice;
|
|
|
break;
|
|
|
}
|
|
|
else{
|
|
|
setposition(19,12);
|
|
|
printf("输入“↑”或“↓”,回车键确认");
|
|
|
}
|
|
|
if(choice<0) choice = 6;
|
|
|
if(choice>6) choice = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void new_info()
|
|
|
{
|
|
|
Settitle("|学生选课系统|管理员功能|");
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
setposition(LB+5,START+1);
|
|
|
printf("录 入 注 意 事 项 :");
|
|
|
setposition(LB+5,START+2);
|
|
|
printf("录入课程所有信息长度超过20字符将自动省略超过部分");
|
|
|
setposition(LB+5,START+3);
|
|
|
printf("同样的课程编号相同,不同的课程编号不同");
|
|
|
setposition(LB+5,START+4);
|
|
|
printf("课程类型不可自定义");
|
|
|
setposition(LB+5,START+5);
|
|
|
printf("录入任何信息若包含空格将自动省略第一个空格及其后面部分");
|
|
|
}
|
|
|
|
|
|
void newone_BOOK()//键入新建内容
|
|
|
{
|
|
|
new_info();
|
|
|
char y;
|
|
|
char id[200]; //编号
|
|
|
char name[200]; //课程
|
|
|
char author[200]; //学分
|
|
|
char type[200]; //课程类型 --->选项 类
|
|
|
char publish[200]; //学时
|
|
|
char o[7][14] = {" 语言类 "," 人文科学 "," 经济学 "," 策略 "," 自然科学 ","天文学"," 医学 "};
|
|
|
do{
|
|
|
setposition(LB,INFO);
|
|
|
clean();
|
|
|
setposition(LB,INFO);
|
|
|
printf("编号:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",id);id[20] = 0;
|
|
|
BOOK *now = head_BOOK;
|
|
|
if(now!=NULL)
|
|
|
{
|
|
|
while(now!=NULL)
|
|
|
{
|
|
|
if(strcmp(now->id,id) == 0)
|
|
|
{
|
|
|
char yes;
|
|
|
setposition(LB,INFO+1);
|
|
|
printf("已存在该课程,是否快速录入(y/任意键退出)");
|
|
|
yes = getch();
|
|
|
setposition(LB,INFO+2);
|
|
|
if(yes == 'y' || yes == 'Y')
|
|
|
{
|
|
|
now->num++;
|
|
|
save_BOOK();
|
|
|
printf("快速录入成功!");
|
|
|
}
|
|
|
else{
|
|
|
printf("课程编号重复!");
|
|
|
save_BOOK();
|
|
|
}
|
|
|
setposition(LB,INFO+3);
|
|
|
Sleep(800);
|
|
|
fflush(stdin);
|
|
|
system("pause");
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
now = now->next;
|
|
|
}
|
|
|
}
|
|
|
setposition(LB,INFO+1);
|
|
|
printf("课程:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",name);name[20] = 0;
|
|
|
setposition(LB,INFO+2);
|
|
|
printf("学分:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",author); author[20] = 0;
|
|
|
setposition(LB,INFO+3);
|
|
|
printf("课程类型:");
|
|
|
fflush(stdin);
|
|
|
strcpy(type , o[book_type_menu_choose()]);
|
|
|
new_info();
|
|
|
setposition(LB,INFO);
|
|
|
printf("编号:");
|
|
|
printf("%s",id);
|
|
|
setposition(LB,INFO+1);
|
|
|
printf("课程:");
|
|
|
printf("%s",name);
|
|
|
setposition(LB,INFO+2);
|
|
|
printf("学分:");
|
|
|
printf("%s",author);
|
|
|
setposition(LB,INFO+3);
|
|
|
printf("课程类型:");
|
|
|
printf("%s",type);
|
|
|
setposition(LB,INFO+4);
|
|
|
printf("学时:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",publish);publish[20] = 0;
|
|
|
fflush(stdin);
|
|
|
setposition(LB,INFO+5);
|
|
|
if(newok_BOOK(id,name,author,type,publish,1))
|
|
|
{
|
|
|
printf("录入成功!\n");
|
|
|
Settitle("|学生选课系统|管理员|录入课程信息|录入成功|");
|
|
|
int cnt = 0,cnt2;
|
|
|
for(cnt2 = 0; cnt2 < 3; cnt2++)
|
|
|
{
|
|
|
setposition(LB+10,INFO+5);
|
|
|
printf(" ");
|
|
|
Sleep(300);
|
|
|
setposition(LB+10,INFO+5);
|
|
|
for(cnt = 0;cnt < 3;cnt++)
|
|
|
{
|
|
|
printf(".");
|
|
|
Sleep(300);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else printf("录入失败\n");
|
|
|
Sleep(800);
|
|
|
new_info();
|
|
|
setposition(LB,INFO);
|
|
|
printf("是否继续新增(y/任意键)\n");
|
|
|
y = getch();
|
|
|
fflush(stdin);
|
|
|
}while(y == 'y' || y == 'Y');
|
|
|
save_BOOK();
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
|
|
|
int newok_BOOK(char*id,char*name,char*author,char*type,char*publish,int num)//写入新建内容
|
|
|
{
|
|
|
BOOK *new1 = NULL;
|
|
|
BOOK *now = head_BOOK;
|
|
|
new1 = (BOOK*)malloc(sizeof(BOOK));
|
|
|
if(new1 == NULL)
|
|
|
{
|
|
|
return 0;//返回0表示失败
|
|
|
}
|
|
|
if(head_BOOK==NULL)
|
|
|
{
|
|
|
head_BOOK = new1;
|
|
|
head_BOOK->next = NULL;
|
|
|
}
|
|
|
else{
|
|
|
while(now->next!=NULL)
|
|
|
{
|
|
|
now = now->next;
|
|
|
}
|
|
|
now->next = new1;
|
|
|
}
|
|
|
new1->next = NULL;
|
|
|
id[20] = 0;
|
|
|
name[20] = 0;
|
|
|
author[20] = 0;
|
|
|
publish[20] = 0;
|
|
|
strcpy(new1->id,id);
|
|
|
strcpy(new1->name,name);
|
|
|
strcpy(new1->author,author);
|
|
|
strcpy(new1->type,type);
|
|
|
strcpy(new1->publish,publish);
|
|
|
new1->num = num;
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
void showall_BOOK(int peo)//显示全部
|
|
|
{
|
|
|
Settitle("|学生选课系统|显示全部课程|");
|
|
|
int k = 2;
|
|
|
mpsort_BOOK();
|
|
|
BOOK *now = head_BOOK;
|
|
|
setposition(LB,INFO+1);
|
|
|
if(now == NULL)
|
|
|
{
|
|
|
printf("无课程信息");
|
|
|
}
|
|
|
else{
|
|
|
printf("%-10s%-10s%-10s%-10s%-10s%-10s","编号","课程","学分","课程类型","学时","可选人数");
|
|
|
while(now!=NULL)
|
|
|
{
|
|
|
setposition(LB,INFO+k);
|
|
|
printf("%-10.8s%-10.8s%-10.8s%-10.8s%-10.8s%-10d",now->id,now->name,now->author,now->type,now->publish,now->num);
|
|
|
now = now->next;
|
|
|
k++;
|
|
|
}
|
|
|
}
|
|
|
setposition(LB,INFO+k+1);
|
|
|
system("pause");
|
|
|
if(peo == 0)
|
|
|
books();
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
|
|
|
void in_BOOK()//读取文件
|
|
|
{
|
|
|
head_BOOK = NULL;
|
|
|
BAR_BOOK = NULL;
|
|
|
if((fp_BOOK = fopen("books.book","r"))==NULL)
|
|
|
{
|
|
|
if((fp_BOOK = fopen("books.book","w"))==NULL)
|
|
|
{
|
|
|
system("cls");
|
|
|
printf("课程文件丢失");
|
|
|
}
|
|
|
else {
|
|
|
close_BOOK();
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
if(fgetc(fp_BOOK)==EOF) return;
|
|
|
rewind(fp_BOOK);
|
|
|
while(!feof(fp_BOOK))
|
|
|
{
|
|
|
char id[21]; //编号
|
|
|
char name[21]; //课程
|
|
|
char author[21]; //学分
|
|
|
char type[21]; //课程类型 --->选项 类
|
|
|
char publish[21]; //学时
|
|
|
int num; //可选人数
|
|
|
fscanf(fp_BOOK,"%s%s%s%s%s%d",id,name,author,type,publish,&num);
|
|
|
newok_BOOK(id,name,author,type,publish,num);
|
|
|
}
|
|
|
mpsort_BOOK();
|
|
|
close_BOOK();
|
|
|
}
|
|
|
|
|
|
void save_BOOK()//保存文件
|
|
|
{
|
|
|
BOOK *now = head_BOOK;
|
|
|
if((fp_BOOK = fopen("books.book","w"))==NULL)
|
|
|
{
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
setposition(LB,INFO);
|
|
|
printf("打开文件失败");
|
|
|
Sleep(3000);
|
|
|
exit(0);
|
|
|
}
|
|
|
while(now!=NULL)
|
|
|
{
|
|
|
fprintf(fp_BOOK," %s %s %s %s %s %d",now->id,now->name,now->author,now->type,now->publish,now->num);
|
|
|
now = now->next;
|
|
|
}
|
|
|
close_BOOK();
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
void close_BOOK()//关闭文件
|
|
|
{
|
|
|
if(fclose(fp_BOOK))
|
|
|
{
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
setposition(LB,INFO);
|
|
|
printf("关闭文件失败");
|
|
|
Sleep(3000);
|
|
|
exit(0);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void mpsort_BOOK()//冒泡
|
|
|
{
|
|
|
/* char id[20]; //编号
|
|
|
* char name[20]; //课程
|
|
|
* char author[20]; //学分
|
|
|
* char type[20]; //课程类型 --->选项 类
|
|
|
* char publish[20]; //学时
|
|
|
* int num;
|
|
|
*/
|
|
|
BOOK *i = NULL;
|
|
|
BOOK *j = NULL;
|
|
|
if(head_BOOK == NULL)
|
|
|
return;
|
|
|
for(i = head_BOOK; i->next!=NULL;i = i->next)
|
|
|
{
|
|
|
for(j = head_BOOK; j->next!=NULL; j = j->next)
|
|
|
{
|
|
|
if(strcmp(j->id,j->next->id) > 0)
|
|
|
{
|
|
|
exchange_BOOK(j->id,j->next->id);
|
|
|
exchange_BOOK(j->name,j->next->name);
|
|
|
exchange_BOOK(j->author,j->next->author);
|
|
|
exchange_BOOK(j->type,j->next->type);
|
|
|
exchange_BOOK(j->publish,j->next->publish);
|
|
|
int temp = j->num;
|
|
|
j->num = j->next->num;
|
|
|
j->next->num = temp;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void exchange_BOOK(char*a,char*b)
|
|
|
{
|
|
|
char temp[30];
|
|
|
strcpy(temp,a);
|
|
|
strcpy(a,b);
|
|
|
strcpy(b,temp);
|
|
|
}
|
|
|
|
|
|
void alter_BOOK_info()
|
|
|
{
|
|
|
Settitle("|学生选课系统|管理员|修改课程信息|");
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
setposition(LB+5,START+1);
|
|
|
printf("修 改 课 程 信 息 注 意 事 项 :");
|
|
|
setposition(LB+5,START+2);
|
|
|
printf("编 号 不 可 重 复");
|
|
|
setposition(LB+5,START+3);
|
|
|
printf("任何信息长度不可多于20个字符,多出部分自动省略");
|
|
|
setposition(LB+5,START+4);
|
|
|
printf("课程可选人数必须为数字,若不是数字则本次修改作废");
|
|
|
setposition(LB+5,START+5);
|
|
|
printf("任何信息若包含空格将自动省略第一个空格及其后面部分");
|
|
|
setposition(LB+5,START+6);
|
|
|
printf("课程可选人数小于0将自动调整为0");
|
|
|
}
|
|
|
|
|
|
void alter_BOOK()
|
|
|
{
|
|
|
|
|
|
BOOK *repair = NULL;
|
|
|
char id[200]; //编号
|
|
|
char name[200]; //课程
|
|
|
char author[200]; //学分
|
|
|
char type[200]; //课程类型 --->选项 类
|
|
|
char publish[200]; //学时
|
|
|
int num;
|
|
|
char o[7][14] = {" 语言类 "," 人文科学 "," 经济学 "," 策略 "," 自然科学 ","天文学"," 医学 "};
|
|
|
alter_BOOK_info();
|
|
|
setposition(LB+5,INFO);
|
|
|
printf("要修改的课程编号:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",id);id[20] = 0;
|
|
|
alter_BOOK_info();
|
|
|
mpsort_BOOK();
|
|
|
BOOK *now = head_BOOK;
|
|
|
setposition(LB,INFO);
|
|
|
if(now == NULL)
|
|
|
{
|
|
|
printf("无课程信息");
|
|
|
setposition(LB,INFO+1);
|
|
|
system("pause");
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
else{
|
|
|
printf("%-10s%-10s%-10s%-10s%-10s%-10s","编号","课程","学分","课程类型","学时","可选人数");
|
|
|
int k = 1;
|
|
|
while(now!=NULL)
|
|
|
{
|
|
|
if(strcmp(id,now->id) == 0)
|
|
|
{
|
|
|
repair = now;
|
|
|
setposition(LB,INFO+k);
|
|
|
printf("%-10.8s%-10.8s%-10.8s%-10.8s%-10.8s%-10d",now->id,now->name,now->author,now->type,now->publish,now->num);
|
|
|
k++;
|
|
|
break;
|
|
|
}
|
|
|
now = now->next;
|
|
|
}
|
|
|
if(k == 1)
|
|
|
{
|
|
|
setposition(LB,INFO);
|
|
|
clean();
|
|
|
setposition(LB,INFO);
|
|
|
printf("无课程信息");
|
|
|
Sleep(800);
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
setposition(LB,INFO+2);
|
|
|
printf("编号:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",id);id[20] = 0;
|
|
|
now = head_BOOK;
|
|
|
setposition(LB,INFO+1+2);
|
|
|
if(now == NULL)
|
|
|
{
|
|
|
clean();
|
|
|
setposition(LB,INFO+1+2);
|
|
|
printf("无课程信息");
|
|
|
setposition(LB,INFO+2+2);
|
|
|
system("pause");
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
if(now != NULL)
|
|
|
{
|
|
|
while(now!=NULL)
|
|
|
{
|
|
|
if(strcmp(now->id,id) == 0)
|
|
|
{
|
|
|
char id2[20];
|
|
|
strcpy(id2,repair->id);
|
|
|
if(strcmp(id,repair->id)==0) break;
|
|
|
setposition(LB,INFO+1+2);
|
|
|
printf("课程编号重复!");
|
|
|
setposition(LB,INFO+2+2);
|
|
|
Sleep(800);
|
|
|
fflush(stdin);
|
|
|
system("pause");
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
now = now->next;
|
|
|
}
|
|
|
}
|
|
|
setposition(LB,INFO+1+2);
|
|
|
printf("课程:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",name);name[20] = 0;
|
|
|
setposition(LB,INFO+2+2);
|
|
|
printf("学分:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",author);author[20] = 0;
|
|
|
setposition(LB,INFO+3+2);
|
|
|
printf("课程类型:");
|
|
|
fflush(stdin);
|
|
|
strcpy(type , o[book_type_menu_choose()]);
|
|
|
new_info();
|
|
|
|
|
|
setposition(LB,INFO);
|
|
|
printf("编号:");
|
|
|
printf("%s",id);
|
|
|
setposition(LB,INFO+1);
|
|
|
printf("课程:");
|
|
|
printf("%s",name);
|
|
|
setposition(LB,INFO+2);
|
|
|
printf("学分:");
|
|
|
printf("%s",author);
|
|
|
setposition(LB,INFO+3);
|
|
|
printf("课程类型:");
|
|
|
printf("%s",type);
|
|
|
setposition(LB,INFO+4);
|
|
|
printf("学时:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",publish);publish[20] = 0;
|
|
|
fflush(stdin);
|
|
|
setposition(LB,INFO+5);
|
|
|
printf("可选人数:");
|
|
|
fflush(stdin);
|
|
|
if(scanf("%d",&num)==0)
|
|
|
{
|
|
|
fflush(stdin);
|
|
|
setposition(LB,INFO+5);
|
|
|
clean();
|
|
|
setposition(LB,INFO+5);
|
|
|
printf("输入错误");
|
|
|
setposition(LB,INFO+6);
|
|
|
system("pause");
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
if(num <= 0) num = 0;
|
|
|
fflush(stdin);
|
|
|
strcpy(repair->id,id);
|
|
|
strcpy(repair->name,name);
|
|
|
strcpy(repair->author,author);
|
|
|
strcpy(repair->type,type);
|
|
|
strcpy(repair->publish,publish);
|
|
|
repair->num = num;
|
|
|
setposition(LB,INFO+6);
|
|
|
printf("修改成功!\n");
|
|
|
Settitle("|学生选课系统|管理员|修改课程信息|修改成功|");
|
|
|
int cnt = 0,cnt2;
|
|
|
for(cnt2 = 0; cnt2 < 3; cnt2++)
|
|
|
{
|
|
|
setposition(LB+10,INFO+6);
|
|
|
printf(" ");
|
|
|
Sleep(300);
|
|
|
setposition(LB+10,INFO+6);
|
|
|
for(cnt = 0;cnt < 3;cnt++)
|
|
|
{
|
|
|
printf(".");
|
|
|
Sleep(300);
|
|
|
}
|
|
|
}
|
|
|
save_BOOK();
|
|
|
setposition(LB,INFO+8);
|
|
|
system("pause");
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
|
|
|
void del_BOOK_info()
|
|
|
{
|
|
|
Settitle("|学生选课系统|管理员|删除课程|");
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
setposition(LB+5,START+1);
|
|
|
printf("删 除 课 程 信 息 注 意 事 项 :");
|
|
|
setposition(LB+5,START+2);
|
|
|
printf("删 除 后 不 可 恢 复");
|
|
|
setposition(LB+5,START+5);
|
|
|
printf("输 入 编 号 删 除 超 过 20 个 字 符 部 分 自 动 省 略");
|
|
|
|
|
|
}
|
|
|
|
|
|
void del_BOOK()
|
|
|
{
|
|
|
del_BOOK_info();
|
|
|
char id[200]; //编号
|
|
|
setposition(LB,INFO);
|
|
|
printf("要删除的课程编号:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",id);id[20] = 0;
|
|
|
del_BOOK_info();
|
|
|
BOOK *now = head_BOOK;
|
|
|
setposition(LB,INFO);
|
|
|
if(now == NULL)
|
|
|
{
|
|
|
printf("无课程信息");
|
|
|
setposition(LB,INFO+1);
|
|
|
system("pause");
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
else{
|
|
|
printf("%-10s%-10s%-10s%-10s%-10s%-10s","编号","课程","学分","课程类型","学时","可选人数");
|
|
|
int k = 1;
|
|
|
while(now->next!=NULL)
|
|
|
{
|
|
|
if(strcmp(id,now->next->id) == 0)
|
|
|
{
|
|
|
setposition(LB,INFO+1);
|
|
|
printf("%-10.8s%-10.8s%-10.8s%-10.8s%-10.8s%-10d",now->next->id,now->next->name,now->next->author,now->next->type,now->next->publish,now->next->num);
|
|
|
k++;
|
|
|
break;
|
|
|
}
|
|
|
now = now->next;
|
|
|
}
|
|
|
if(k == 1)
|
|
|
{
|
|
|
if(strcmp(head_BOOK->id,id) == 0)
|
|
|
{
|
|
|
setposition(LB,INFO+1);
|
|
|
printf("%-10.8s%-10.8s%-10.8s%-10.8s%-10.8s%-10d",head_BOOK->id,head_BOOK->name,head_BOOK->author,head_BOOK->type,head_BOOK->publish,head_BOOK->num);
|
|
|
}
|
|
|
else{
|
|
|
setposition(LB,INFO);
|
|
|
clean();
|
|
|
setposition(LB,INFO);
|
|
|
printf("无课程信息");
|
|
|
setposition(LB,INFO+1);
|
|
|
system("pause");
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
printf("删除成功!");
|
|
|
now = head_BOOK;
|
|
|
if((fp_BOOK = fopen("books.book","w"))==NULL)
|
|
|
{
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
setposition(LB,INFO);
|
|
|
printf("打开文件失败");
|
|
|
Sleep(3000);
|
|
|
exit(0);
|
|
|
}
|
|
|
while(now!=NULL)
|
|
|
{
|
|
|
if(strcmp(now->id,id)!=0)
|
|
|
fprintf(fp_BOOK,"%s %s %s %s %s %d ",now->id,now->name,now->author,now->type,now->publish,now->num);
|
|
|
now = now->next;
|
|
|
}
|
|
|
close_BOOK();
|
|
|
in_BOOK();
|
|
|
setposition(LB,INFO+2);
|
|
|
system("pause");
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
|
|
|
void conshow_BOOK_choice(int peo)
|
|
|
{
|
|
|
int choice = 0;
|
|
|
while(1)
|
|
|
{
|
|
|
conshow_BOOK_menu(choice);
|
|
|
setposition(19,12);
|
|
|
printf("输入“↑”或“↓”,回车键确认");
|
|
|
HideCursor();
|
|
|
char a,b;
|
|
|
b = getch();
|
|
|
if(b==-32)
|
|
|
a = getch();
|
|
|
fflush(stdin);
|
|
|
if(a == UP && b == -32)
|
|
|
{
|
|
|
choice--;
|
|
|
}
|
|
|
else if(a == DOWN && b == -32)
|
|
|
{
|
|
|
choice++;
|
|
|
}
|
|
|
else if(b==13){
|
|
|
if(choice == 5) showall_BOOK(peo);
|
|
|
if(choice == 3)
|
|
|
conshow_BOOK(book_type_menu_choose()+10,peo);
|
|
|
conshow_BOOK(choice,peo);
|
|
|
break;
|
|
|
}
|
|
|
else{
|
|
|
setposition(19,12);
|
|
|
printf("输入“↑”或“↓”,回车键确认");
|
|
|
}
|
|
|
if(choice<0) choice = 5;
|
|
|
if(choice>5) choice = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void conshow_BOOK_menu(int choice)
|
|
|
{
|
|
|
Settitle("|学生选课系统|检索课程|");
|
|
|
char con[6][26] = {"按编号","按课程","按学分","按课程类型","按学时","全部"};
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
int i,j = 0;
|
|
|
for(i = 0; i <= 5;i++)
|
|
|
{
|
|
|
if(choice == i)
|
|
|
setcolor(0,15);
|
|
|
setposition(LB+25,START+i+1);
|
|
|
printf("%s",con[j++]);
|
|
|
setcolor(11,0);
|
|
|
}
|
|
|
}
|
|
|
void conshow_BOOK(int fun,int peo)
|
|
|
{
|
|
|
int flag = fun;//-1表示查询编号
|
|
|
if(fun == -1) fun = 0;
|
|
|
BOOK *now = head_BOOK;
|
|
|
setposition(LB,INFO);
|
|
|
if(now == NULL)
|
|
|
{
|
|
|
printf("无课程信息");
|
|
|
Sleep(800);
|
|
|
if(peo == 0)
|
|
|
books();
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
printf("%-10s%-10s%-10s%-10s%-10s%-10s","编号","课程","学分","课程类型","学时","可选人数");
|
|
|
if(fun==0)
|
|
|
{
|
|
|
char id[200];
|
|
|
setposition(LB,INFO+1);
|
|
|
printf("编号:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",id);id[20] = 0;
|
|
|
setposition(LB,INFO+1);
|
|
|
clean();
|
|
|
fflush(stdin);
|
|
|
int k = 1;
|
|
|
while(now!=NULL)
|
|
|
{
|
|
|
if(strcmp(id,now->id) == 0)
|
|
|
{
|
|
|
setposition(LB,INFO+k);
|
|
|
printf("%-10.8s%-10.8s%-10.8s%-10.8s%-10.8s%-10d",now->id,now->name,now->author,now->type,now->publish,now->num);
|
|
|
k++;
|
|
|
BAR_BOOK = now;
|
|
|
}
|
|
|
now = now->next;
|
|
|
}
|
|
|
if(k == 1)
|
|
|
{
|
|
|
setposition(LB,INFO);
|
|
|
clean();
|
|
|
setposition(LB,INFO);
|
|
|
printf("无课程信息");
|
|
|
Sleep(800);
|
|
|
if(peo == 0)
|
|
|
books();
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
}
|
|
|
if(fun==1)
|
|
|
{
|
|
|
char id[200];
|
|
|
setposition(LB,INFO+1);
|
|
|
printf("课程:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",id);id[20] = 0;
|
|
|
setposition(LB,INFO+1);
|
|
|
clean();
|
|
|
fflush(stdin);
|
|
|
int k = 1;
|
|
|
while(now!=NULL)
|
|
|
{
|
|
|
if(strcmp(id,now->name) == 0)
|
|
|
{
|
|
|
setposition(LB,INFO+k);
|
|
|
printf("%-10.8s%-10.8s%-10.8s%-10.8s%-10.8s%-10d",now->id,now->name,now->author,now->type,now->publish,now->num);
|
|
|
k++;
|
|
|
}
|
|
|
now = now->next;
|
|
|
}
|
|
|
if(k == 1)
|
|
|
{
|
|
|
setposition(LB,INFO);
|
|
|
clean();
|
|
|
setposition(LB,INFO);
|
|
|
printf("无课程信息");
|
|
|
Sleep(800);
|
|
|
if(peo == 0)
|
|
|
books();
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
|
|
|
}
|
|
|
if(fun==2)
|
|
|
{
|
|
|
char id[200];
|
|
|
setposition(LB,INFO+1);
|
|
|
printf("学分:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",id);id[20] = 0;
|
|
|
fflush(stdin);
|
|
|
int k = 1;
|
|
|
while(now!=NULL)
|
|
|
{
|
|
|
if(strcmp(id,now->author) == 0)
|
|
|
{
|
|
|
setposition(LB,INFO+k);
|
|
|
printf("%-10.8s%-10.8s%-10.8s%-10.8s%-10.8s%-10d",now->id,now->name,now->author,now->type,now->publish,now->num);
|
|
|
k++;
|
|
|
}
|
|
|
now = now->next;
|
|
|
}
|
|
|
if(k == 1)
|
|
|
{
|
|
|
setposition(LB,INFO);
|
|
|
clean();
|
|
|
setposition(LB,INFO);
|
|
|
printf("无课程信息");
|
|
|
Sleep(800);
|
|
|
if(peo == 0)
|
|
|
books();
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
}
|
|
|
if(fun==4)
|
|
|
{
|
|
|
char id[200];
|
|
|
setposition(LB,INFO+1);
|
|
|
printf("学时:");
|
|
|
fflush(stdin);
|
|
|
scanf("%s",id);id[20] = 0;
|
|
|
fflush(stdin);
|
|
|
setposition(LB,INFO+1);
|
|
|
clean();
|
|
|
int k = 1;
|
|
|
while(now!=NULL)
|
|
|
{
|
|
|
if(strcmp(id,now->publish) == 0)
|
|
|
{
|
|
|
setposition(LB,INFO+k);
|
|
|
printf("%-10.8s%-10.8s%-10.8s%-10.8s%-10.8s%-10d",now->id,now->name,now->author,now->type,now->publish,now->num);
|
|
|
k++;
|
|
|
}
|
|
|
now = now->next;
|
|
|
}
|
|
|
if(k == 1)
|
|
|
{
|
|
|
setposition(LB,INFO);
|
|
|
clean();
|
|
|
setposition(LB,INFO);
|
|
|
printf("无课程信息");
|
|
|
Sleep(800);
|
|
|
if(peo == 0)
|
|
|
books();
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
}
|
|
|
if(fun>=10)
|
|
|
{
|
|
|
fun-=10;
|
|
|
char o[7][14] = {" 语言类 "," 人文科学 "," 经济学 "," 策略 "," 自然科学 ","天文学"," 医学 "};
|
|
|
fflush(stdin);
|
|
|
int k = 1;
|
|
|
while(now!=NULL)
|
|
|
{
|
|
|
if(strcmp(o[fun],now->type) == 0)
|
|
|
{
|
|
|
setposition(LB,INFO+k);
|
|
|
printf("%-10.8s%-10.8s%-10.8s%-10.8s%-10.8s%-10d",now->id,now->name,now->author,now->type,now->publish,now->num);
|
|
|
k++;
|
|
|
}
|
|
|
now = now->next;
|
|
|
}
|
|
|
if(k == 1)
|
|
|
{
|
|
|
setposition(LB,INFO);
|
|
|
clean();
|
|
|
setposition(LB,INFO);
|
|
|
printf("无课程信息");
|
|
|
Sleep(800);
|
|
|
if(peo == 0)
|
|
|
books();
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
}
|
|
|
printf("\n ");
|
|
|
system("pause");
|
|
|
if(flag != -1){
|
|
|
if(peo == 0)
|
|
|
books();
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void borrowandreturn_BOOK_info()
|
|
|
{
|
|
|
Settitle("|学生选课系统|选课与退课|");
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
setposition(LB+5,START+1);
|
|
|
printf("选 课 与 退 课 注 意 事 项 :");
|
|
|
setposition(LB+5,START+2);
|
|
|
printf("输入所有信息长度超过20字符将自动省略超过部分");
|
|
|
setposition(LB+5,START+3);
|
|
|
printf("最多可以选三门课");
|
|
|
setposition(LB+5,START+4);
|
|
|
printf("一次只能选一门课或退一门课");
|
|
|
setposition(LB+5,START+5);
|
|
|
printf("录入任何信息若包含空格将自动省略第一个空格及其后面部分");
|
|
|
}
|
|
|
void borrow_BOOK(int peo)
|
|
|
{
|
|
|
borrowandreturn_BOOK_info();
|
|
|
Settitle("|学生选课系统|选课与退课|选课|");
|
|
|
conshow_BOOK(-1,peo);
|
|
|
setposition(LB,INFO+2);
|
|
|
clean();
|
|
|
setposition(LB,INFO+2);
|
|
|
if(peo == 0)
|
|
|
{
|
|
|
if(BAR_BOOK->num <= 0|| user->booknum >= 3)
|
|
|
{
|
|
|
printf("无法选课!");
|
|
|
}
|
|
|
else{
|
|
|
BAR_BOOK->num--;
|
|
|
booknum++;
|
|
|
user->booknum = booknum;
|
|
|
if(strcmp(user->book1,"o") == 0)
|
|
|
{
|
|
|
strcpy(user->book1,BAR_BOOK->id);
|
|
|
strcpy(book1,BAR_BOOK->id);
|
|
|
}
|
|
|
else if(strcmp(user->book2,"o") == 0)
|
|
|
{
|
|
|
strcpy(user->book2,BAR_BOOK->id);
|
|
|
strcpy(book2,BAR_BOOK->id);
|
|
|
}
|
|
|
else if(strcmp(user->book3,"o") == 0)
|
|
|
{
|
|
|
strcpy(user->book3,BAR_BOOK->id);
|
|
|
strcpy(book3,BAR_BOOK->id);
|
|
|
}
|
|
|
printf("选课成功!");
|
|
|
save();
|
|
|
}
|
|
|
}
|
|
|
if(peo == 1)
|
|
|
{
|
|
|
if(BAR_BOOK->num <= 0|| ADMIN.booknum >= 3)
|
|
|
{
|
|
|
printf("无法选课!");
|
|
|
}
|
|
|
else{
|
|
|
BAR_BOOK->num--;
|
|
|
ADMIN.booknum++;
|
|
|
if(strcmp(ADMIN.book1,"o") == 0)
|
|
|
{
|
|
|
strcpy(ADMIN.book1,BAR_BOOK->id);
|
|
|
strcpy(book1,BAR_BOOK->id);
|
|
|
}
|
|
|
else if(strcmp(ADMIN.book2,"o") == 0)
|
|
|
{
|
|
|
strcpy(ADMIN.book2,BAR_BOOK->id);
|
|
|
strcpy(book2,BAR_BOOK->id);
|
|
|
}
|
|
|
else if(strcmp(ADMIN.book3,"o") == 0)
|
|
|
{
|
|
|
strcpy(ADMIN.book3,BAR_BOOK->id);
|
|
|
strcpy(book3,BAR_BOOK->id);
|
|
|
}
|
|
|
printf("选课成功!");
|
|
|
admin_save();
|
|
|
}
|
|
|
}
|
|
|
save_BOOK();
|
|
|
setposition(LB,INFO+3);
|
|
|
system("pause");
|
|
|
if(peo == 0)
|
|
|
books();
|
|
|
admin_BOOK_choice();
|
|
|
BAR_BOOK = NULL;
|
|
|
}
|
|
|
void return_BOOK(int peo)
|
|
|
{
|
|
|
borrowandreturn_BOOK_info();
|
|
|
Settitle("|学生选课系统|选课与退课|退课|");
|
|
|
conshow_BOOK(-1,peo);
|
|
|
setposition(LB,INFO+2);
|
|
|
clean();
|
|
|
setposition(LB,INFO+2);
|
|
|
if(peo == 0)
|
|
|
{
|
|
|
if(strcmp(user->book1,BAR_BOOK->id) != 0&&strcmp(user->book2,BAR_BOOK->id) != 0&&strcmp(user->book3,BAR_BOOK->id) != 0)
|
|
|
{
|
|
|
printf("无法退课!");
|
|
|
}
|
|
|
else{
|
|
|
BAR_BOOK->num++;
|
|
|
if(strcmp(user->book1,BAR_BOOK->id) == 0)
|
|
|
{
|
|
|
strcpy(user->book1,user->book2);
|
|
|
strcpy(book1,book2);
|
|
|
strcpy(user->book2,user->book3);
|
|
|
strcpy(book2,book3);
|
|
|
strcpy(user->book3,"o");
|
|
|
strcpy(book3,"o");
|
|
|
}
|
|
|
else if(strcmp(user->book1,BAR_BOOK->id) == 0)
|
|
|
{
|
|
|
strcpy(user->book2,user->book3);
|
|
|
strcpy(book2,book3);
|
|
|
strcpy(user->book3,"o");
|
|
|
strcpy(book3,"o");
|
|
|
}
|
|
|
else if(strcmp(user->book1,BAR_BOOK->id) == 0)
|
|
|
{
|
|
|
strcpy(user->book3,"o");
|
|
|
strcpy(book3,"o");
|
|
|
}
|
|
|
printf("退课成功!");
|
|
|
booknum--;
|
|
|
user->booknum = booknum;
|
|
|
save();
|
|
|
}
|
|
|
}
|
|
|
if(peo == 1)
|
|
|
{
|
|
|
if(strcmp(ADMIN.book1,BAR_BOOK->id) != 0&&strcmp(ADMIN.book2,BAR_BOOK->id) != 0&&strcmp(ADMIN.book3,BAR_BOOK->id) != 0)
|
|
|
{
|
|
|
printf("无法退课!");
|
|
|
}
|
|
|
else{
|
|
|
BAR_BOOK->num++;
|
|
|
if(strcmp(ADMIN.book1,BAR_BOOK->id) == 0)
|
|
|
{
|
|
|
strcpy(ADMIN.book1,ADMIN.book2);
|
|
|
strcpy(book1,book2);
|
|
|
strcpy(ADMIN.book2,ADMIN.book3);
|
|
|
strcpy(book2,book3);
|
|
|
strcpy(ADMIN.book3,"o");
|
|
|
strcpy(book3,"o");
|
|
|
}
|
|
|
else if(strcmp(ADMIN.book1,BAR_BOOK->id) == 0)
|
|
|
{
|
|
|
strcpy(ADMIN.book2,ADMIN.book3);
|
|
|
strcpy(book2,book3);
|
|
|
strcpy(ADMIN.book3,"o");
|
|
|
strcpy(book3,"o");
|
|
|
}
|
|
|
else if(strcmp(ADMIN.book1,BAR_BOOK->id) == 0)
|
|
|
{
|
|
|
strcpy(ADMIN.book3,"o");
|
|
|
strcpy(book3,"o");
|
|
|
}
|
|
|
printf("退课成功!");
|
|
|
ADMIN.booknum--;
|
|
|
admin_save();
|
|
|
}
|
|
|
}
|
|
|
save_BOOK();
|
|
|
setposition(LB,INFO+3);
|
|
|
system("pause");
|
|
|
BAR_BOOK = NULL;
|
|
|
if(peo == 0)
|
|
|
books();
|
|
|
admin_BOOK_choice();
|
|
|
}
|
|
|
void borrowandreturn_BOOK_choice(int peo)
|
|
|
{
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
int choice = 0;
|
|
|
while(1)
|
|
|
{
|
|
|
borrowandreturn_BOOK_menu(choice);
|
|
|
setposition(19,12);
|
|
|
printf("输入“↑”或“↓”,回车键确认");
|
|
|
HideCursor();
|
|
|
char a,b;
|
|
|
b = getch();
|
|
|
if(b==-32)
|
|
|
a = getch();
|
|
|
fflush(stdin);
|
|
|
if(a == UP && b == -32)
|
|
|
{
|
|
|
choice--;
|
|
|
}
|
|
|
else if(a == DOWN && b == -32)
|
|
|
{
|
|
|
choice++;
|
|
|
}
|
|
|
else if(b==13){
|
|
|
if(choice == 0) borrow_BOOK(peo);
|
|
|
if(choice == 1) return_BOOK(peo);
|
|
|
if(choice == 2) back_BOOK(peo);
|
|
|
break;
|
|
|
}
|
|
|
else{
|
|
|
setposition(19,12);
|
|
|
printf("输入“↑”或“↓”,回车键确认");
|
|
|
}
|
|
|
if(choice<0) choice = 2;
|
|
|
if(choice>2) choice = 0;
|
|
|
}
|
|
|
}
|
|
|
void borrowandreturn_BOOK_menu(int choice)
|
|
|
{
|
|
|
Settitle("|学生选课系统|选课与退课|");
|
|
|
system("cls");
|
|
|
showtitle();
|
|
|
char o[3][30] = {"选 课","退 课","返回上一级"};
|
|
|
int i,j = 0,k=-1;
|
|
|
for(i = 0; i <= 2;i++,k++)
|
|
|
{
|
|
|
if(choice == i)
|
|
|
setcolor(0,15);
|
|
|
setposition(LB+21,START+i+k+3);
|
|
|
printf("%s",o[j++]);
|
|
|
setcolor(11,0);
|
|
|
}
|
|
|
setposition(LB,INFO+1);
|
|
|
}
|
|
|
|
|
|
void back_BOOK(int peo)
|
|
|
{
|
|
|
if(peo == 0) books();
|
|
|
else admin_BOOK_choice();
|
|
|
}
|
|
|
|