用C语言写一个图书管理系统大作业
c语言按照课程表应该已经结束了,但是竟然没有学习宏定义c语言指针也是简单的介绍了一下,没有太深入学习,这让我对学习的挺纳闷的,但是大作业该写还是要写的,没有用指针,但是老师要求的功能该实现的都实现了,展示下代码有需要的可以直接取用,发现不足的地方也请多多指教
//内容包括了增删改查 管理员用户单独的登录界面 用户名和密码的修改,借书本数以及图书的各个修改等等
//查询时显示本数、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void defaultbook();//默认图书
void defaultuser();//默认用户
void printfbooks();//打印图书
void printfusers();//打印用户
int login();//登录中
void vipindex();//管理员登录
void manindex();//普通羊登录
int getname();//得到一个书名
int getusername();//得到一个用户名
void querybook();//查询图书
void updateown();//用来接收使用者在数组中的位置
void adduser();//添加用户
void addbook();//添加图书
void deletebook();
void deleteuser();
void updateuser();//管理员修改信息
void updatebook();
void borrowbook();//借阅图书
void hadbook();//查询已经借阅的图书
void returnbook();//归还图书
int getbooklen();
void adminquerybook();
int selectid();
typedef struct book{
int booknum;
char bookname[10];
char bookwriter[10];
float bookprice;
int blen;//图书起始全部为1,借出去后为0
}book;
typedef struct user{
int usernum;
char username[10];
int userpwd;
int userlevel;
book books[50];//用于存储该用户借阅的书籍
int ulen;//用于统计该用户已经借阅书籍的个数,起始全部为0
}user;
int userlen = 5; //表示用户的实际个数
int booklen = 5;//表示书籍的实际个数
user users[100];//初始时用户的个数
book books[100];//初始时书籍的个数
char welcome[10];//用于接收用户名并在头部登录界面欢迎
int update;
void main()
{
defaultbook();
defaultuser();
//由于用户不一定一次性输入正确 所以设置个循环如果正确则跳出去错误则继续输出
while(1)
{//设置一个值用来接收防止多次打印出输入错误和输入正确
int i=login();
if(i==1)
{ system("cls");
vipindex();
}
if(i==2)
{
system("cls");
manindex();
}
if(i==-1)
{
printf("输入有误,请检查账号或者密码\n");
system("pause");
}
}
}
void defaultbook()//默认图书
{
books[0].booknum=111111111;
strcpy(books[0].bookname,“三国演义”);
strcpy(books[0].bookwriter,“罗贯中”);
books[0].bookprice =19.90;
books[0].blen=1;
books[1].booknum=222222222;
strcpy(books[1].bookname,"水浒传");
strcpy(books[1].bookwriter,"施耐庵");
books[1].bookprice =29.90;
books[1].blen=1;
books[2].booknum=333333333;
strcpy(books[2].bookname,"西游记");
strcpy(books[2].bookwriter,"吴承恩");
books[2].bookprice =49.90;
books[2].blen=1;
books[3].booknum=444444444;
strcpy(books[3].bookname,"红楼梦");
strcpy(books[3].bookwriter,"曹雪芹");
books[3].bookprice =99.90;
books[3].blen=1;
books[4].booknum=555555555;
strcpy(books[4].bookname,"聊斋志异");
strcpy(books[4].bookwriter,"蒲松龄");
books[4].bookprice =199.90;
books[4].blen=1;
}
void defaultuser()//默认用户
{
users[0].usernum=10000;
strcpy(users[0].username,“慢羊羊”);
users[0].userpwd=10086;
users[0].userlevel=0;
users[0].ulen=0;
users[1].usernum=10001;
strcpy(users[1].username,"喜羊羊");
users[1].userpwd=10001;
users[1].userlevel=1;
users[1].ulen=0;
users[2].usernum=10002;
strcpy(users[2].username,"美羊羊");
users[2].userpwd=10010;
users[2].userlevel=1;
users[2].ulen=0;
users[3].usernum=10003;
strcpy(users[3].username,"懒羊羊");
users[3].userpwd=10119;
users[3].userlevel=1;
users[3].ulen=0;
users[4].usernum=10004;
strcpy(users[4].username,"沸羊羊");
users[4].userpwd=10120;
users[4].userlevel=1;
users[4].ulen=0;
}
void printfbooks()//打印图书
{
int i;
for(i=0;i<booklen;i++)
{
printf(“图书编号:%d\n图书名称:%s\n图书作者:%s\n图书价格:%.2f\n图书目前本数:%d\n”,books[i].booknum,books[i].bookname,books[i].bookwriter,books[i].bookprice,books[i].blen);
}
system(“pause”);
}
void printfusers()//打印用户
{int i;
for(i=0;i<userlen;i++)
{
printf(“用户账号:%d\n用户昵称:%s\n用户密码:%d\n用户等级:%d\n”,users[i].usernum,users[i].username,users[i].userpwd,users[i].userlevel);
}
system(“pause”);
}
int login()//登录
{
int ID;//用来接收账号和密码
int pwd;
int i;
system("cls");
printf("========欢迎光临中国国家图书馆========\n");
printf("请输入您的账号\n");
scanf("%d",&ID);
printf("请输入您的密码\n");
scanf("%d",&pwd);
for(i=0;i<5;i++)
{
if(ID==users[i].usernum&& pwd==users[i].userpwd )
{
if(users[i].userlevel==0)
{
strcpy(welcome,users[i].username);
return 1;
}
else if(users[i].userlevel==1)
{
strcpy(welcome,users[i].username);
update=i;
return 2;
}
}
}
return -1;//写在外面是为了结束循环在进行跳转
}
void vipindex()
{ //因为要多次循环所以设置一个死循环只有我们需要按退出是才能退出
int order;
int a=1;
while(a1)
{ system(“cls”);
printf("=欢迎登陆 管理员※%s=\n",welcome);
printf(“请输入指令进行操作:\n”);
printf(“1.添加图书 2.删除图书 3.修改图书 4.查询图书\n”);
printf(“5.添加用户 6.删除用户 7.修改用户 8.查看用户\n”);
printf(“9.退出系统\n”);
scanf("%d",&order);
switch(order)
{
case 1 : addbook();break;
case 2 : deletebook();break;
case 3 : updatebook();break;
case 4 : adminquerybook();break;
case 5 : adduser();break;
case 6 : deleteuser();break;
case 7 : updateuser();break;
case 8 : printfusers();;break;
case 9 : a=-1 ;break;
default : printf(“输入指令错误\n”);system(“pause”);
}
}
}
void manindex()
{
int order;
int a=1;
while(a1)
{
system(“cls”);
printf("=欢迎登陆 尊敬的用户※%s=\n",welcome);
printf(“您可以:\n”);
printf(“1.查看图书 2.借阅图书 3.归还图书 \n”);
printf(“4.查看借阅图书 5.修改个人信息6.退出系统\n”);
scanf("%d",&order);
switch(order)
{
case 1 :printfbooks();break;
case 2 : borrowbook();break;
case 3 :returnbook();break;
case 4 : hadbook();break;
case 5 : updateown();break;
case 6 : a=-1;system(“cls”);break;
default : printf(“输入指令错误\n”);system(“pause”);
}
}
}
int getname()
{
char query[10];
int i;
printf(“请输入图书名字\n”);
scanf("%s",query);
for(i=0;i<=booklen;i++)
{
if(strcmp(query,books[i].bookname)==0)
{
return i;
}
}
return -1;
}
void adminquerybook()
{ int z;
printf(“1.单个查询\t2.遍历图书\n”);
scanf("%d",&z);
if(z1)
{
querybook();
}
else if(z2)
{
printfbooks();
}
else
{
printf(“指令输入错误\n”);
system(“pause”);
}
}
void querybook()//管理员功能4 查询图书
{ int i=getname();
if(i!=-1)
{
printf("图书存在\n");
printf("图书编号:%d\n图书名称:%s\n图书作者:%s\n图书价格:%.2f\n图书本数%d\n",books[i].booknum,books[i].bookname,books[i].bookwriter,books[i].bookprice,books[i].blen);
system("pause");
}
else
{
printf("您输入的图书不存在\n");
system("pause");
}
}
void updateown()
{
int i=update;
char choose1[1];
printf("您账号是%d\n",users[i].usernum);
printf("您现在的昵称是%s是否修改Y/N\n",users[i].username);
scanf("%s",choose1);
if(strcmp(choose1,"Y")==0)
{
printf("请输入更改后的昵称\n");
scanf("%s",users[i].username);
}
printf("您现在的密码是%d是否修改Y/N\n",users[i].userpwd);
scanf("%s",choose1);
if(strcmp(choose1,"Y")==0)
{
printf("请输入更改后的密码\n");
scanf("%d",&users[i].userpwd);
}
printf("修改成功,退出重新登陆即可显示\n");
system("pause");
}
int selectid()//比较是否与已有账号重复
{ int a=userlen;
int c;
int i;
printf(“请输入要添加用户的账号\n”);
scanf("%d",&c);
for(i=0;i<userlen;i++)
{
if(cusers[i].usernum)
{
return -1;
}
}
return c;
}
void adduser()//管理员功能 5
{
user append;
int i=selectid();
int a=userlen;
if(i!=-1)
{
append.usernum=i;
printf(“请输入要添加账户的昵称\n”);
scanf("%s",append.username);
printf(“请输入要添加用户的密码\n”);
scanf("%d",&append.userpwd);
printf(“请输入要添加用户的权限等级0 or 1\n”);
scanf("%d",&append.userlevel );
if(append.userlevel1 || append.userlevel==0)
{
printf(“添加成功\n”);
}
else{
printf(“等级只允许设置0 or 1\n”);
printf(“添加失败请重新添加用户\n”);
system(“pause”);
return ;
}
users[userlen]=append;
userlen++;
system(“pause”);
}
else
{
printf(“账号重复,请换个账号重新添加\n”);
system(“pause”);
}
}
void addbook()
{
book append;
char a[2];
printf(“请输入要添加图书的编号\n”);
scanf("%d",&append.booknum );
printf(“请输入要添加图书的名称\n”);
scanf("%s",append.bookname );
printf(“请输入要添加图书的作者\n”);
scanf("%s",append.bookwriter );
printf(“请输入要添加用户的价格\n”);
scanf("%f",&append.bookprice );
printf(“图书信息编辑完成,是否确定添加?Y/N\n”);
scanf("%s",a);
if(strcmp(a,“Y”)==0)
{
printf(“添加成功\n”);
}
else{
printf(“添加失败\n”);
system(“pause”);
return;
}
append.blen =1;
books[booklen]=append;
booklen++;
system("pause");
}
void deletebook()
{
int a=getname();
int i;
if(a!=-1)
{
for(i=a;i<booklen-1;i++)
{
books[i]=books[i+1];
}
booklen–;
printf(“删除成功\n”);
}
else printf(“图书名称错误\n”);
system(“pause”);
}
int getusername()
{
char query[10];
int i;
printf(“请输入用户昵称\n”);
scanf("%s",query);
for(i=0;i<=userlen;i++)
{
if(strcmp(query,users[i].username)==0)
{
return i;
}
}
return -1;
}
void deleteuser()
{
int a=getusername();
int i;
if(a!=-1)
{
for(i=a;i<userlen-1;i++)
{
users[i]=users[i+1];
}
userlen–;
printf(“删除成功\n”);
}
else printf(“用户昵称错误\n”);
system(“pause”);
}
void updateuser()
{
int i=getusername();
char choose1[1];
if(i!=-1)
{
printf(“您要修改的账号是%d\n”,users[i].usernum);
printf(“现在的昵称是%s是否修改Y/N\n”,users[i].username);
scanf("%s",choose1);
if(strcmp(choose1,“Y”)==0)
{
printf(“请输入更改后的昵称\n”);
scanf("%s",users[i].username);
}
printf(“您现在的密码是%d是否修改Y/N\n”,users[i].userpwd);
scanf("%s",choose1);
if(strcmp(choose1,“Y”)==0)
{
printf(“请输入更改后的密码\n”);
scanf("%d",&users[i].userpwd);
}
printf(“操作成功,退出后重新登录时显示\n”);
system(“pause”);
}
else
{
printf(“用户名输入错误\n”);
system(“pause”);
}
}
void updatebook()
{
int i=getname();
char choose1[1];
if(i!=-1)
{
printf(“您要修改的图书名字是%s\n”,books[i].bookname);
printf(“图书名字是否修改Y/N\n”,books[i].bookname);
scanf("%s",choose1);
if(strcmp(choose1,“Y”)==0)
{
printf(“请输入更改后的书籍名字\n”);
scanf("%s",&books[i].bookname);
}
printf(“现在的书籍编号是%d是否修改Y/N\n”,books[i].booknum);
scanf("%s",choose1);
if(strcmp(choose1,“Y”)==0)
{
printf(“请输入更改后的编号\n”);
scanf("%d",&books[i].booknum);
}
printf(“现在的作者的名字是%s是否修改Y/N\n”,books[i].bookwriter);
scanf("%s",choose1);
if(strcmp(choose1,“Y”)==0)
{
printf(“请输入更改后的作者名字\n”);
scanf("%s",books[i].bookwriter);
}
printf(“现在的图书价格是%.2f是否修改Y/N\n”,books[i].bookprice);
scanf("%s",choose1);
if(strcmp(choose1,“Y”)0)
{
printf(“请输入更改后的价格\n”);
scanf("%f",&books[i].bookprice);
}
printf(“修改成功\n”);
system(“pause”);
}
else
{
printf(“输入的名字错误\n”);
system(“pause”);
}
}
void borrowbook()
{
int k=update;//登陆者数组位置
int a=getname();//图书数组中的位置
int q=users[k].ulen;//已借图书的数量
char j[2];
if(a!=-1)
{
printf(“您查询的图书存在\n目前剩余%d\n”,books[a].blen);
if(books[a].blen1)
{
printf(“是否确定借阅?Y/N\n”);
scanf("%s",j);
if(strcmp(j,“Y”)==0)
{
printf(“借阅成功\n”);
users[k].books[q]=books[a];
users[k].ulen++;
books[a].blen–;
}
else
{
printf(“正在返回\n”);
}
}
else
{
printf(“本书已经被借阅\n”);
}
}
else
{
printf(“您输入的图书不存在\n”);
}
system(“pause”);
}
void hadbook()
{ int i;
int a=update;//登陆者数组位置
int q=users[a].ulen;
if(q!=0)
{
for(i=0;i<q;i++)
{
printf("您已经借的图书为\n");
printf("图书编号:%d\n图书名称:%s\n图书作者:%s\n图书价格:%.2f\n",users[a].books[i].booknum,users[a].books[i].bookname,users[a].books[i].bookwriter,users[a].books[i].bookprice);
}
}
else
{
printf("您暂时没有已经借的书\n");
}
system("pause");
}
int getbooklen()
{
int i,j,k;//k用来遍历要归还图书在图书数组中的的下标
int a=update; //登陆者数组位置
int q=users[a].ulen;//已借图书的数量
int c=booklen;//c用来接收目前图书的总数
char b[10];
printf(“请输入您要归还图书的名字\n”);
scanf("%s",b);
for(k=0;k<c;k++)
{
if(strcmp(b,books[k].bookname)==0)//用来遍历归还图书在书籍数组中的下标位置
break;
}
for(i=0;i<q;i++)
{
if(strcmp(b,users[a].books[i].bookname)==0)
{
for(j=i;i<=q;j++)
{
users[a].books[i]=users[a].books[i+1];//当已借图书数量为3的时候 则q为3,当进行循环的时候经过三轮循环,第一次i为0 当i=2 时候 则 遍历了全部以借用的书籍
//当输入的书籍相同时 进入for循环 j此时起始值要与书籍相同 防止交换时把前面不需要换的书籍归还了 假设借的书籍为
//第二本则此时i为1;q此时为2
//
users[a].ulen--; //
books[k].blen++;//定义一个来接收要归还图书在books数组中位置
return 1;
}
}
}
return -1;
}
void returnbook()
{
int a=getbooklen();
if(a==1)
{
printf(“已经成功归还\n”);
}
else
{
printf(“名字错误或者没有已经借的图书,请先查询已借的图书\n”);
}
system(“pause”);
}
//这个是9月26号的,应该是最后一次修改的吧可能有些繁琐请见谅

浙公网安备 33010602011771号