图书管理系统
可能会有点小bug但是不是很影响使用,用来练手或者应付期末考试应该足够了~~
结构`
void login();
void out_put(int n);
int input_class(struct Class *s,int num);
void output_class(struct Class *s,int num);
void find_class(struct Class *s,int num);
void change_class(struct Class *s,int num);
void Change_class(struct Class *s,int i);
int delete_class(struct Class *s,int num);
void sort_class(struct Class *s,int num);
void into_class(struct Class *s,int num);
void swap(struct Class *a,struct Class *b);
int read_class(struct Class *s);
void write_class(struct Class *s,int n);
下面是正文共1.1k行代码
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <Windows.h>
#include <string.h>
using namespace std;
struct Class
{
char num[30];
char name[30];
char sex[10];
int time;
double score;
};
int flag_input=1;
void login();
void out_put(int n);
int input_class(struct Class *s,int num);
void output_class(struct Class *s,int num);
void find_class(struct Class *s,int num);
void change_class(struct Class *s,int num);
void Change_class(struct Class *s,int i);
int delete_class(struct Class *s,int num);
void sort_class(struct Class *s,int num);
void into_class(struct Class *s,int num);
void swap(struct Class *a,struct Class *b);
int read_class(struct Class *s);
void write_class(struct Class *s,int n);
int main()
{
struct Class s[200];
int number=0;
char choice;
while(1)
{
system("cls");
out_put(2);
cout<<"请输入你的选择"<<endl;
cin>>choice;
if(choice<'0'||choice>'7')
{
cout<<"你的输入有误,请重新输入"<<endl;
system("pause");
}
else
{
switch(choice)
{
case '0':
exit(0);
case '1':
number=read_class(s);
number+=input_class(s,number);
flag_input=0;
break;
case '2':
number=read_class(s);
output_class(s,number);
break;
case '3':
number=read_class(s);
find_class(s,number);
break;
case '4':
number=read_class(s);
change_class(s,number);
write_class(s,number);
break;
case '5':
number=read_class(s);
number-=delete_class(s,number);
write_class(s,number);
break;
case '6':
number=read_class(s);
sort_class(s,number);
write_class(s,number);
break;
case '7':
number=read_class(s);
into_class(s,number);
break;
}
}
}
}
void login()
{
while(1)
{
system("cls");
out_put(1);
char choice;
cin>>choice;
char key[20],code[20];
strcpy(key,"1111111");
strcpy(code,"1111");
int key_num,code_num;
key_num=strlen(key);
code_num=strlen(code);
char user_num[20],user_passwd[20];
int i;
if(choice=='1')
{
for(i=3;i>0;i--)
{
cout<<"请输入不会超过11位的学号"<<endl;
cin>>user_num;
getchar();
cout<<"请输入密码"<<endl;
cin>>user_passwd;
if((strcmp(user_num,key)!=0)&&(strcmp(user_passwd,code)!=0))
{
system("cls");
if(i==1)
{
cout<<"输入错误次数已达3次,系统自动退出"<<endl;
system("pause");
exit(0);
}
cout<<"对不起,学号和密码都输入错误,还有"<<i-1<<"次机会,请重新输入"<<endl;
}
else if((strlen(user_num)>11)||(strcmp(user_num,key)!=0))
{
system("cls");
if(i==1)
{
cout<<"输入错误次数已达3次,系统自动退出"<<endl;
system("pause");
exit(0);
}
cout<<"对不起,学号输入错误,还有"<<i-1<<"次机会,请重新输入"<<endl;
}
else if((strlen(user_passwd)>5)||(strcmp(user_passwd,code)!=0))
{
system("cls");
if(i==1)
{
cout<<"输入错误次数已达3次,系统自动退出"<<endl;
system("pause");
exit(0);
}
cout<<"对不起,密码输入错误,还有"<<i-1<<"次机会,请重新输入"<<endl;
}
else
{
system("cls");
cout<<"输入正确,欢迎光临!!"<<endl;
system("pause");
return;
}
}
}
else if(choice=='0')
exit(0);
else
{
cout<<"输入错误,请重新输入"<<endl;
system("pause");
}
}
}
int input_class(struct Class *s,int num)
{
FILE *file;
int i=0;
if((file=fopen("class.txt","a"))==NULL)
{
cout<<"打开文件失败!"<<endl;
system("pause");
exit(0);
}
int n=0;
int tmp=0;
int class_num=0;
while(1)
{
system("cls");
class_num+=n;
out_put(3);
char choice;
cin>>choice;
if(choice=='1')
{
cout<<"请输入你要新建的课程数"<<endl;
scanf("%d",&n);
class_num+=n;
tmp=n+num;
int flag=0;
getchar();
for(i=num;i<tmp;i++)
{
system("cls");
printf("请输入第%d个课程的课程编号:",i+1-flag_input);
gets(s[i].num);
while(1)
{
if(strlen(s[i].num)<=10)
{
break;
}
else
{
cout<<"你的输入有误,请输入10位数以内的课程编号!"<<endl;
printf("请输入第%d个课程的课程编号:",i+1-flag_input);
gets(s[i].num);
}
}
printf("请输入第%d个课程的课程名称:",i+1-flag_input);
gets(s[i].name);
while(1)
{
if(strlen(s[i].name)<=20)
{
break;
}
else
{
cout<<"你的输入有误,请输入10个字以内的课程名称!"<<endl;
printf("请输入第%d个课程的课程名称:",i+1-flag_input);
gets(s[i].name);
}
}
printf("请输入第%d个课程的课程性质(必修/选修):",i+1-flag_input);
gets(s[i].sex);
while(1)
{
if((strcmp(s[i].sex,"必修")==0)||(strcmp(s[i].sex,"选修")==0))
{
break;
}
else
{
cout<<"你的输入有误,请输入必修或者选修!"<<endl;
printf("请输入第%d个课程的课程性质:",i+1-flag_input);
scanf("%s",s[i].sex);
}
}
printf("请输入第%d个课程的课程总学时:",i+1-flag_input);
scanf("%d",&s[i].time);
while(1)
{
if(s[i].time>100||s[i].time<=0)
{
cout<<"你的输入有误,请输入0-100之间的一个整数"<<endl;
printf("请输入第%d个课程的课程总学时:",i+1-flag_input);
scanf("%d",&s[i].time);
}
else
break;
}
printf("请输入第%d个课程的课程学分:",i+1-flag_input);
scanf("%lf",&s[i].score);
while(1)
{
if(s[i].score>5.0||s[i].score<=0.0)
{
cout<<"你的输入有误,请输入0-5之间的一个实数"<<endl;
printf("请输入第%d个课程的课程学分:",i+1-flag_input);
scanf("%lf",&s[i].score);
}
else
break;
}
fprintf(file,"%s %s %s %d %lf\n",s[i].num,s[i].name,s[i].sex,s[i].time,s[i].score);
system("pause");
getchar();
}
}
else if(choice =='0')
{
if(fclose(file))
{
cout<<"关闭文件失败!"<<endl;
exit(0);
}
return class_num;
}
else
{
out_put(4);
}
}
}
void output_class(struct Class *s,int num)
{
system("cls");
if(num==0)
{
cout<<"对不起,文件内暂无课程信息,请先新建课程!"<<endl;
system("pause");
}
else
printf("课程编号 课程名称 课程性质 总学时 学分\n");
for(int i=0;i<num;i++)
{
printf("%s",s[i].num);
printf("%10s",s[i].name);
printf("%15s",s[i].sex);
printf(" ");
cout<<s[i].time;
printf("%10.2f\n",s[i].score);
}
system("pause");
}
void find_class(struct Class *s,int num)
{
while(1)
{
system("cls");
out_put(5);
char choice;
cin>>choice;
getchar();
int flag;
switch(choice)
{
case '1':
flag=1;
break;
case '2':
flag=2;
break;
case '0':
return;
default:
out_put(4);
break;
}
char name[20],number[20];
int flag_find=0;
if(flag==1)
{
flag_find=2;
cout<<"输入你所要查询的课程编码"<<endl;
scanf("%s",number);
for(int i=0;i<num;i++)
{
if(strcmp(number,s[i].num)==0)
{
if(flag_find==2)
{
cout<<"恭喜你,查询到了你想要的信息!"<<endl;
out_put(6);
}
printf("%s",s[i].num);
printf("%10s",s[i].name);
printf("%15s",s[i].sex);
printf(" ");
cout<<s[i].time;
printf("%10.2f\n",s[i].score);
flag_find=1;
}
}
if(flag_find==2)
{
cout<<"并未找到课程编码为:"<<number<<"的课程"<<endl;
system("pause");
}else
system("pause");
}
else if(flag==2)
{
flag_find=0;
cout<<"输入你所要查询的课程名称"<<endl;
scanf("%s",name);
for(int i=0;i<num;i++)
{
if(strcmp(name,s[i].name)==0)
{
if(flag_find==0)
{
cout<<"恭喜你,查询到了你想要的信息!"<<endl;
out_put(6);
}
printf("%s",s[i].num);
printf("%10s",s[i].name);
printf("%15s",s[i].sex);
printf(" ");
cout<<s[i].time;
printf("%10.2f\n",s[i].score);
flag_find=1;
}
}
if(flag_find==0)
{
cout<<"并未找到课程名称为:"<<name<<"的课程"<<endl;
system("pause");
}else
system("pause");
}
}
}
void change_class(struct Class *s,int num)
{
while(1)
{
system("cls");
out_put(7);
char choice;
cin>>choice;
getchar();
int flag;
switch(choice)
{
case '1':
flag=1;
break;
case '2':
flag=2;
break;
case '0':
return;
default:
out_put(4);
break;
}
char name[20],number[20];
int flag_find=0;
if(flag==1)
{
flag_find=2;
cout<<"输入你所要修改的课程编码"<<endl;
scanf("%s",number);
for(int i=0;i<num;i++)
{
if(strcmp(number,s[i].num)==0)
{
if(flag_find==2)
{
cout<<"恭喜你,查询到了你想要修改的信息!"<<endl;
out_put(6);
}
printf("%s",s[i].num);
printf("%10s",s[i].name);
printf("%15s",s[i].sex);
printf(" ");
cout<<s[i].time;
printf("%10.2f\n",s[i].score);
flag_find=1;
Change_class(s,i);
}
}
if(flag_find==2)
{
cout<<"并未找到课程编码为:"<<number<<"的课程"<<endl;
system("pause");
}else
system("pause");
}
else if(flag==2)
{
flag_find=0;
cout<<"输入你想要修改的课程名称"<<endl;
scanf("%s",name);
for(int i=0;i<num;i++)
{
if(strcmp(name,s[i].name)==0)
{
if(flag_find==0)
{
cout<<"恭喜你,查询到了你想要修改的信息!"<<endl;
out_put(6);
}
printf("%s",s[i].num);
printf("%10s",s[i].name);
printf("%15s",s[i].sex);
printf(" ");
cout<<s[i].time;
printf("%10.2f\n",s[i].score);
flag_find=1;
Change_class(s,i);
}
}
if(flag_find==0)
{
cout<<"并未找到课程名称为:"<<name<<"的课程"<<endl;
system("pause");
}else
system("pause");
}
}
}
void Change_class(struct Class *s,int i)
{
int flag;
while(1)
{
out_put(8);
char choice;
cin>>choice;
getchar();
if(choice >'6'||choice < '0')
{
out_put(4);
}else
{
switch(choice)
{
case '1':
flag=1;
break;
case '2':
flag=2;
break;
case '3':
flag=3;
break;
case '4':
flag=4;
break;
case '5':
flag=5;
break;
case '0':
return;
break;
}
}
if(flag==1)
{
printf("请输入修改后课程的课程编号:\n");
gets(s[i].num);
while(1)
{
if(strlen(s[i].num)<=10)
{
break;
}
else
{
cout<<"你的输入有误,请输入10位数以内的课程编号!"<<endl;
printf("请输入第%d个课程的课程编号:",i+1-flag_input);
gets(s[i].num);
}
}
}else if(flag==2)
{
printf("请输入修改后课程的课程名称:");
gets(s[i].name);
while(1)
{
if(strlen(s[i].name)<=20)
{
break;
}
else
{
cout<<"你的输入有误,请输入10个字以内的课程名称!"<<endl;
printf("请输入修改后课程的课程名称:");
gets(s[i].name);
}
}
}else if(flag==3)
{
printf("请输入修改后课程的课程性质(必修/选修):");
gets(s[i].sex);
while(1)
{
if((strcmp(s[i].sex,"必修")==0)||(strcmp(s[i].sex,"选修")==0))
{
break;
}
else
{
cout<<"你的输入有误,请输入必修或者选修!"<<endl;
printf("请输入修改后课程的课程性质:");
scanf("%s",s[i].sex);
}
}
}else if(flag==4)
{
printf("请输入修改后课程的课程总学时:");
scanf("%d",&s[i].time);
while(1)
{
if(s[i].time>100||s[i].time<=0)
{
cout<<"你的输入有误,请输入0-100之间的一个整数"<<endl;
printf("请输入修改后课程的课程总学时:");
scanf("%d",&s[i].time);
}
else
break;
}
}else if(flag==5)
{
printf("请输入修改后课程的课程学分:");
scanf("%lf",&s[i].score);
while(1)
{
if(s[i].score>5||s[i].score<=0)
{
cout<<"你的输入有误,请输入0-5之间的一个实数"<<endl;
printf("请输入修改后课程的课程总学时:");
scanf("%lf",&s[i].score);
}
else
break;
}
}
}
}
int delete_class(struct Class *s,int num)
{
int count=0;
while(1)
{
system("cls");
out_put(9);
char choice;
int flag=0;
switch(choice)
{
case '1':
flag=1;
break;
case '2':
flag=2;
break;
case '0':
return count;
break;
default :
out_put(4);
break;
}
char name[30],number[30];
int flag_delete=0;
if(flag==1)
{
flag_delete=0;
cout<<"输入你要删除的课程编号:";
cin>>number;
for(int i=0;i<num;i++)
{
if(strcmp(number,s[i].num)==0)
{
count++;
if(flag_delete==0)
{
printf("课程编号 课程名称 课程性质 总学时 学分\n");
printf("%s",s[i].num);
printf("%10s",s[i].name);
printf("%15s",s[i].sex);
printf(" ");
cout<<s[i].time;
printf("%10.2f\n",s[i].score);
flag_delete=1;
for(int m=i;m<num-1;m++)
s[m]=s[m+1];
}
}
}
if(flag_delete==1)
{
cout<<"恭喜你删除成功!"<<endl;
system("pause");
}
}else if(flag==2)
{
flag_delete=2;
cout<<"输入你要删除的课程名称:";
cin>>name;
for(int i=0;i<num;i++)
{
if(strcmp(name,s[i].name)==0)
{
count++;
if(flag_delete==2)
{
printf("课程编号 课程名称 课程性质 总学时 学分\n");
printf("%s",s[i].num);
printf("%10s",s[i].name);
printf("%15s",s[i].sex);
printf(" ");
cout<<s[i].time;
printf("%10.2f\n",s[i].score);
flag_delete=1;
for(int m=i;m<num-1;m++)
s[m]=s[m+1];
}
}
}
if(flag_delete==1)
{
cout<<"恭喜你删除成功!"<<endl;
system("pause");
}
}
if(flag==1||flag==2)
{
if(flag_delete==0)
{
cout<<"并未找到课程编码为:"<<number<<"的课程"<<endl;
system("pause");
}
else if(flag_delete==2)
{
cout<<"并未找到课程名称为:"<<name<<"的课程"<<endl;
system("pause");
}
}
}
}
void sort_class(struct Class *s,int num)
{
while(1)
{
system("cls");
out_put(10);
char choice;
int flag;
cin>>choice;
if(choice>'2'||choice < '0')
{
out_put(4);
}else
{
switch(choice)
{
case '1':
flag=1;
break;
case '2':
flag=2;
break;
case '0':
flag=0;
break;
}
}
if(flag==1)
{
for(int i=0;i<num-1;i++)
for(int j=0;j<num-1;j++)
if(strcmp(s[j].num,s[j+1].num)>0)
swap(s[j],s[j+1]);
}else if(flag==2)
{
for(int i=0;i<num-1;i++)
for(int j=0;j<num-1;j++)
if(strcmp(s[j].name,s[j+1].name)>0)
swap(s[j],s[j+1]);
}else if(flag==0)
{
write_class(s,num);
cout<<"成功退出排序菜单!"<<endl;
system("pause");
return;
}
}
}
void swap(struct Class *a,struct Class *b)
{
struct Class *tmp;
tmp=b;
b=a;
a=tmp;
}
void into_class(struct Class *s,int num)
{
struct Class tmp;
char choice;
int flag;
while(1)
{
out_put(11);
cin>>choice;
if(choice>'2'||choice < '0')
{
out_put(4);
}else
{
switch(choice)
{
case '1':
flag=1;
break;
case '2':
flag=2;
break;
case '0':
flag=0;
break;
}
}
if(flag==1)
{
cout<<"请输入要插入的课程!"<<endl;
printf("请输入课程编号:");
gets(tmp.num);
while(1)
{
if(strlen(tmp.num)<=10)
{
break;
}
else
{
cout<<"你的输入有误,请输入10位数以内的课程编号!"<<endl;
printf("请输入课程编号:");
gets(tmp.num);
}
}
printf("请输入课程名称:");
gets(tmp.name);
while(1)
{
if(strlen(tmp.name)<=20)
{
break;
}
else
{
cout<<"你的输入有误,请输入10个字以内的课程名称!"<<endl;
printf("请输入课程名称:");
gets(tmp.name);
}
}
printf("请输入课程性质(必修/选修):");
gets(tmp.sex);
while(1)
{
if((strcmp(tmp.sex,"必修")==0)||(strcmp(tmp.sex,"选修")==0))
{
break;
}
else
{
cout<<"你的输入有误,请输入必修或者选修!"<<endl;
printf("请输入课程性质:");
scanf("%s",tmp.sex);
}
}
printf("请输入课程总学时:");
scanf("%d",&tmp.time);
while(1)
{
if(tmp.time>100||tmp.time<=0)
{
cout<<"你的输入有误,请输入0-100之间的一个整数"<<endl;
printf("请输入课程总学时:");
scanf("%d",&tmp.time);
}
else
break;
}
printf("请输入课程学分:");
scanf("%lf",&tmp.score);
while(1)
{
if(tmp.score>5.0||tmp.score<=0.0)
{
cout<<"你的输入有误,请输入0-5之间的一个实数"<<endl;
printf("请输入课程学分:");
scanf("%lf",&tmp.score);
}
else
break;
}
s[num+1]=tmp;
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(strcmp(s[j].num,s[j+1].num)>0)
swap(s[j],s[j+1]);
}else if(flag==2)
{
cout<<"请输入要插入的课程!"<<endl;
printf("请输入课程编号:");
gets(tmp.num);
while(1)
{
if(strlen(tmp.num)<=10)
{
break;
}
else
{
cout<<"你的输入有误,请输入10位数以内的课程编号!"<<endl;
printf("请输入课程编号:");
gets(tmp.num);
}
}
printf("请输入课程名称:");
gets(tmp.name);
while(1)
{
if(strlen(tmp.name)<=20)
{
break;
}
else
{
cout<<"你的输入有误,请输入10个字以内的课程名称!"<<endl;
printf("请输入课程名称:");
gets(tmp.name);
}
}
printf("请输入课程性质(必修/选修):");
gets(tmp.sex);
while(1)
{
if((strcmp(tmp.sex,"必修")==0)||(strcmp(tmp.sex,"选修")==0))
{
break;
}
else
{
cout<<"你的输入有误,请输入必修或者选修!"<<endl;
printf("请输入课程性质:");
scanf("%s",tmp.sex);
}
}
printf("请输入课程总学时:");
scanf("%d",&tmp.time);
while(1)
{
if(tmp.time>100||tmp.time<=0)
{
cout<<"你的输入有误,请输入0-100之间的一个整数"<<endl;
printf("请输入课程总学时:");
scanf("%d",&tmp.time);
}
else
break;
}
printf("请输入课程学分:");
scanf("%lf",&tmp.score);
while(1)
{
if(tmp.score>5.0||tmp.score<=0.0)
{
cout<<"你的输入有误,请输入0-5之间的一个实数"<<endl;
printf("请输入课程学分:");
scanf("%lf",&tmp.score);
}
else
break;
}
s[num+1]=tmp;
for(int i=0;i<num;i++)
for(int j=0;j<num;j++)
if(strcmp(s[j].name,s[j+1].name)>0)
swap(s[j],s[j+1]);
}
else if(flag==0)
{
write_class(s,num);
cout<<"成功退出插入菜单!"<<endl;
system("pause");
return;
}
}
}
int read_class(struct Class *s)
{
FILE *file;
int i=0;
if((file=fopen("class.txt","r"))==NULL)
{
cout<<"打开文件失败!"<<endl;
system("pause");
exit(0);
}
while(!feof(file))
{
fscanf(file,"%s %s %s %d %lf\n",s[i].num,s[i].name,s[i].sex,&s[i].time,&s[i].score);
i++;
}
if(fclose(file))
{
cout<<"关闭文件失败!"<<endl;
system("pause");
exit(0);
}
return i;
}
void write_class(struct Class *s,int n)
{
FILE *file;
int i=0;
if((file=fopen("class.txt","w"))==NULL)
{
cout<<"打开文件失败!"<<endl;
system("pause");
exit(0);
}
for(i=0;i<n;i++)
{
fprintf(file,"%s %s %s %d %lf\n",s[i].num,s[i].name,s[i].sex,s[i].time,s[i].score);
}
if(fclose(file))
{
cout<<"关闭文件失败!"<<endl;
system("pause");
exit(0);
}
}
void out_put(int n)
{
if(n==1)
{
cout<<"欢迎来到课程管理模拟系统"<<endl;
cout<<"************************"<<endl;
cout<<"1---------------用户登陆"<<endl;
cout<<"0---------------退出系统"<<endl;
cout<<"************************"<<endl;
}
else if(n==2)
{
cout<<"*********主菜单*********"<<endl;
cout<<"1------------新建课程"<<endl;
cout<<"2------------浏览课程"<<endl;
cout<<"3------------查询课程"<<endl;
cout<<"4------------修改课程"<<endl;
cout<<"5------------删除课程"<<endl;
cout<<"6------------课程排序"<<endl;
cout<<"7------------插入课程"<<endl;
cout<<"0------------退出系统"<<endl;
cout<<"************************"<<endl;
}else if(n==3)
{
cout<<"******新建课程菜单******"<<endl;
cout<<"1------------新建课程"<<endl;
cout<<"0------------退出系统"<<endl;
cout<<"************************"<<endl;
}else if(n==4)
{
cout<<"输入错误,请重新输入"<<endl;
system("pause");
}else if(n==5)
{
cout<<"******查询课程菜单******"<<endl;
cout<<"1----按照课程编码查询"<<endl;
cout<<"2----按照课程名称查询"<<endl;
cout<<"0----退出查询课程菜单"<<endl;
cout<<"************************"<<endl;
}else if(n==6)
{
printf("课程编号 课程名称 课程性质 总学时 学分\n");
}else if(n==7)
{
cout<<"******修改课程菜单******"<<endl;
cout<<"1----按照课程编码修改"<<endl;
cout<<"2----按照课程名称修改"<<endl;
cout<<"0----退出修改课程菜单"<<endl;
cout<<"************************"<<endl;
}
else if(n==8)
{
cout<<"******修改内容菜单******"<<endl;
cout<<"1--------修改课程编号"<<endl;
cout<<"2--------修改课程名称"<<endl;
cout<<"3--------修改课程性质"<<endl;
cout<<"4--------修改课程学时"<<endl;
cout<<"5--------修改课程学分"<<endl;
cout<<"0----退出修改内容菜单"<<endl;
cout<<"************************"<<endl;
}else if(n==9)
{
cout<<"******删除课程菜单******"<<endl;
cout<<"1----按照课程编号删除"<<endl;
cout<<"2----按照课程名称删除"<<endl;
cout<<"0----退出删除课程菜单"<<endl;
cout<<"************************"<<endl;
}else if(n==10)
{
cout<<"******课程排序菜单******"<<endl;
cout<<"1----按照课程编号排序"<<endl;
cout<<"2----按照课程名称排序"<<endl;
cout<<"0----退出排序课程菜单"<<endl;
cout<<"************************"<<endl;
}else if(n==11)
{
cout<<"******课程插入菜单******"<<endl;
cout<<"1----按照课程编号插入"<<endl;
cout<<"2----按照课程名称插入"<<endl;
cout<<"0----退出插入课程菜单"<<endl;
cout<<"************************"<<endl;
}
}
|