#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include"windows.h"
#define M 50
struct date
{int year;
int month;
int day;
};
struct library
{
int book_num;
char book_name[40];
char author_name[10];
float book_price;
char publisher[40];
struct date publish_time;
char book_state[2];
char reader_name[10];
int reader_num;
};
int input(struct library book[]);
int add(struct library book[],int n);
void list(struct library book[],int n);
void search_num(struct library book[],int n);
void search_name(struct library book[],int n);
int Delete(struct library book[],int n);
void sort(struct library book[],int n);
void count(struct library book[],int n);
void unborrow(struct library book[],int n);
void saverecord(struct library book[],int n);
int loadrecord(struct library book[]);
int menu();
void main()
{
struct library b[M];
int length;
while(1)
{
switch(menu())
{
case 1:length=input(b);
if(length==-1)break;
else
saverecord(b,length);
break;
case 2:length=loadrecord(b);
length=add(b,length);
saverecord(b,length);
break;
case 3:length=loadrecord(b);
list(b,length);
break;
case 4:length=loadrecord(b);
search_num(b,length);
break;
case 5:length=loadrecord(b);
search_name(b,length);
break;
case 6:length=loadrecord(b);
length=Delete(b,length);
saverecord(b,length);
break;
case 7:length=loadrecord(b);
sort(b,length);
saverecord(b,length);
list(b,length);
break;
case 8:length=loadrecord(b);
count(b,length);
saverecord(b,length);
break;
case 9:length=loadrecord(b);
unborrow(b,length);
break;
case 0:exit(0);
}
}
}
int menu()
{
int c;
system("mode con:cols=400 lines=30000"); //调节控制台的宽度和高度
system("color 0b"); //调节控制台的背景和字体颜色
printf("\t\t\t\t\t-------------------------------------------------\n");
printf("\t\t\t\t\t+ 图书信息管理系统 +\n");
printf("\t\t\t\t\t-------------------------------------------------\n");
printf("\t\t\t\t\t\t\t ***************\n");
printf("\t\t\t\t\t\t\t 1. 初始化图书信息\n");
printf("\t\t\t\t\t\t\t 2. 添加图书信息\n");
printf("\t\t\t\t\t\t\t 3. 显示图书信息\n") ;
printf("\t\t\t\t\t\t\t 4. 按图书编号查询图书信息\n");
printf("\t\t\t\t\t\t\t 5. 按图书名称查询图书信息\n");
printf("\t\t\t\t\t\t\t 6. 按图书名称删除图书信息\n");
printf("\t\t\t\t\t\t\t 7. 按图书名称从小到大排序图书信息\n");
printf("\t\t\t\t\t\t\t 8. 按价格统计图书信息\n") ;
printf("\t\t\t\t\t\t\t 9. 显示未借出图书信息\n");
printf("\t\t\t\t\t\t\t 10. 修改图书信息\n");
printf("\t\t\t\t\t\t\t 0. 退出\n") ;
printf("\t\t\t\t\t\t\t ***************\n");
do{
printf("\n Enter your choice(0-10):");
if(scanf("%d",&c)!=1)
{ while(getchar()!='\n')
continue;
continue;
}
}while(c<0||c>11);
return c;
}
int input(struct library book[])
{
int i,n;
system("cls");
printf("\t输入图书的数量:\n");
scanf("\t\t\t\t%d",&n);
system("cls");
printf("\t开始输入记录:\n");
for(i=0;i<n;i++)
{
printf("\n\t第%d条记录的图书编号:",i+1);
scanf("\t%d",&book[i].book_num);
printf("\t第%d条记录的图书名称:",i+1);
scanf("\t%s",book[i].book_name);
printf("\t第%d条记录的图书作者姓名:",i+1);
scanf("\t%s",book[i].author_name);
printf("\t第%d条记录的图书价格:",i+1);
scanf("\t%f",&book[i].book_price);
printf("\t第%d条记录的图书出版社:",i+1);
scanf("\t%s",book[i].publisher);
printf("\t第%d条记录的图书出版时间:",i+1);
scanf("\t%d-%d=%d",&book[i].publish_time.year,&book[i].publish_time.month,&book[i].publish_time.day);
printf("\t第%d条记录的图书存在状态(y/n):",i+1);
scanf("\t%s",book[i].book_state);
printf("\t第%d条记录的读者姓名:",i+1);
scanf("\t%s",book[i].reader_name);
printf("\t第%d条记录的读者学号:",i+1);
scanf("\t%d",&book[i].reader_num);
}
printf("\t\n");
printf("\t 已输入成功!\n");
printf("\t press any key enter menu......\n");
printf("\t\n");
getchar();
getchar();
system("cls");
return n;
}
int add(struct library book[],int n)
{
int i,m;
system("cls");
printf("\t输入再增加的记录数:\n");
scanf("%d",&m);
printf("\t开始输入记录:\n");
for(i=n;i<n+m;i++)
{
printf("\n\t第%d条记录的图书编号:",i+1);
scanf("\t%d",&book[i].book_num);
printf("\t第%d条记录的图书名称:",i+1);
scanf("\t%s",book[i].book_name);
printf("\t第%d条记录的图书作者姓名:",i+1);
scanf("\t%s",book[i].author_name);
printf("\t第%d条记录的图书价格:",i+1);
scanf("\t%f",&book[i].book_price);
printf("\t第%d条记录的图书出版社:",i+1);
scanf("\t%s",book[i].publisher);
printf("\t第%d条记录的图书出版时间:",i+1);
scanf("\t%d-%d=%d",&book[i].publish_time.year,&book[i].publish_time.month,&book[i].publish_time.day);
printf("\t第%d条记录的图书存在状态(y/n):",i+1);
scanf("\t%s",book[i].book_state);
printf("\t第%d条记录的读者姓名:",i+1);
scanf("\t%s",book[i].reader_name);
printf("\t第%d条记录的读者学号:",i+1);
scanf("\t%d",&book[i].reader_num);
}
printf("\t\n");
printf("\t 已输入成功!\n");
printf("\t press any key enter menu......\n");
printf("\t\n");
getchar();
getchar();
system("cls");
return (n+m);
}
void list(struct library book[],int n)
{
int i;
system("cls");
printf("\t图书馆图书信息如下:\n");
printf("\t图书编号\t图书名称\t作者\t单价\t出版社\t\t出版时间\t存在状态\t读者姓名\t读者学号\n");
for(i=0;i<n;i++)
{
printf("\t%6d\t%12s\t%10s\t%4.2f\t%6s\t",book[i].book_num,book[i].book_name,book[i].author_name,book[i].book_price,book[i].publisher);
printf("\t%4d-%2d-%2d\t%2s\t%6s\t%8d\t\n",book[i].publish_time,book[i].book_state,book[i].reader_name,book[i].reader_num);
}
printf("\t\n");
printf("\t press any key enter menu......\n");
printf("\t\n");
getchar();
getchar();
system("cls");
}
void search_num(struct library book[],int n)
{
int i,flag=0;
int bnum;
system("cls");
printf("\t输入查询编号:\n");
scanf("%d",&bnum);
for(i=0;i<n;i++)
{
if(book[i].book_num==bnum)
flag=1;
system("cls");
printf("\t图书馆图书信息如下:\n");
printf("\t图书编号\t图书名称\t作者\t单价\t出版社\t\t出版时间\t存在状态\t读者姓名\t读者学号\n");
printf("\t%6d\t%12s\t%10s\t%4.2f\t%6s\t",book[i].book_num,book[i].book_name,book[i].author_name,book[i].book_price,book[i].publisher);
printf("\t%4d-%2d-%2d\t%2s\t%6s\t%8d\t\n",book[i].publish_time,book[i].book_state,book[i].reader_name,book[i].reader_num);
printf("\t\n");
printf("\t press any key enter menu......\n");
printf("\t\n");
getchar();
getchar();
system("cls");
}
if(flag==0)
{
printf("查无此书!\n");
printf("\t\n");
printf("\t press any key enter menu......\n");
printf("\t\n");
getchar();
getchar();
system("cls");
}
}
void search_name(struct library book[],int n)
{
int i,flag=0;
char bname[10];
system("cls");
printf("\n请输入要查询的图书书名:");
scanf("%s",bname);
for(i=0;i<n;i++)
{
if(strcmp(bname,book[i].book_name)==0)
{
flag=1;
system("cls");
printf("\t此书的信息如下:\n");
printf("\t图书编号\t图书名称\t作者\t单价\t出版社\t\t出版时间\t存在状态\t读者姓名\t读者学号\n");
printf("\t%6d\t%12s\t%10s\t%4.2f\t%6s\t",book[i].book_num,book[i].book_name,book[i].author_name,book[i].book_price,book[i].publisher);
printf("\t%4d-%2d-%2d\t%2s\t%6s\t%8d\t\n",book[i].publish_time,book[i].book_state,book[i].reader_name,book[i].reader_num);
printf("\t\n");
printf("\t press any key enter menu......\n");
printf("\t\n");
getchar();
getchar();
system("cls");
}
}
if(flag==0)
{
printf("没有此书!\n");
printf("\t\n");
printf("\t press any key enter menu......\n");
printf("\t\n");
getchar();
getchar();
system("cls");
}
}
int Delete(struct library book[],int n)
{
int i,j,flag=0;
char bname[10];
char ch='n';
system("cls");
printf("请输入要删除的图书名字\n");
scanf("%s",bname);
for(i=0;i<n;i++)
{
if(strcmp(bname,book[i].book_name)==0)
{
flag=1;
printf("\t此书的信息如下:\n");
printf("\t图书编号\t图书名称\t作者\t单价\t出版社\t\t出版时间\t存在状态\t读者姓名\t读者学号\n");
printf("\t%6d\t%12s\t%10s\t%4.2f\t%6s\t",book[i].book_num,book[i].book_name,book[i].author_name,book[i].book_price,book[i].publisher);
printf("\t%4d-%2d-%2d\t%2s\t%6s\t%8d\t\n",book[i].publish_time,book[i].book_state,book[i].reader_name,book[i].reader_num);
printf("是否要删除此条信息!(y/n):");
ch=getchar();
ch=getchar();
if(ch=='y'||ch=='Y')
{
for(j=i;j<n;j++)
book[j]=book[j+1];
n--;
printf("是否要删除此信息!(y/n):");
}
printf("\t\n");
printf("\t press any key enter menu......\n");
printf("\t\n");
getchar();
getchar();
system("cls");
}
}
if(flag==0)
{
printf("\t 查无此书!\n");
printf("\t\n");
printf("\t press any key enter menu......\n");
printf("\t\n");
getchar();
getchar();
system("cls");
}
return n;
}
void sort(struct library book[],int n)
{
}
void count(struct library book[],int n)
{
int i,count1=0;float p;
system("cls");
printf("请输入任意一个价格:");
scanf("%f",&p);
for(i=0;i<n;i++)
{if(book[i].book_price>p)
count1++;
}
printf("\t图书的数量为:%d \n\n\n\n",count1);
printf("\t\n");
printf("\t press any key enter menu......\n");
printf("\t\n");
getchar();
getchar();
system("cls");
}
void unborrow(struct library book[],int n)
{
}
void saverecord(struct library book[],int n)
{
int i;
FILEfp;
if((fp=fopen("record.txt","w"))==NULL)
{
printf("can not open file\n");
exit(1);
}
for(i=0;i<n;i++)
fwrite(&book[i],sizeof(struct library),1,fp);
fclose(fp);
}
int loadrecord(struct library book[])
{
int n=0;
FILEfp;
if((fp=fopen("record.txt","r"))==NULL)
{
printf("can not open file\n");
exit(0);
}
while(fread(&book[n],sizeof(struct library),1,fp))n++;
fclose(fp);
printf("从文件中成功读出记录!!!\n");
return n;
}
如何实现功能9与10.并在此基础上进行一定的创新改良,最好有代码与具体思路
#include<stdio.h>
struct node{
int a;
int b;
};
struct node c[5];
int n;
void print(){
int i;
printf("\n当前数据:\n");
for(i=1;i<=n;i++){
printf("第%d组:a=%d,b=%d\n",i,c[i].a,c[i].b);
}
printf("\n\n");
}//输出
void setnum(){
int i;
printf("输入n,表示共有n组数据:\n");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("输入第%d组数据的两个值a、b,用空格隔开:\n",i);
scanf("%d%d",&c[i].a,&c[i].b);
}
}//录入数据
void removed(){
int i,j;
printf("输入i,表示要删除第i数据:\n");
scanf("%d",&i);
for(j=i;j<=n-1;j++){
c[j]=c[j+1];
}//循环覆盖,让后一个覆盖前一个,所以j最大值取n-1
n--;//结构体中的元素减少1个
}//删除数据
void insertd(){
int i,j,aaa,bbb;
printf("输入要插入的位置,数据a,b:\n");
scanf("%d,%d,%d",&i,&aaa,&bbb);
n=n+1;
for(j=n;j>=n-i+1;j--){
c[j]=c[j-1];
}//i位后的数据后移,让出一个位置
c[i].a=aaa;
c[i].b=bbb;
}//插入数据
void chang(){
int i,aa,bb;
printf("输入i,a,b,表示要将第i组数据修改成a、b:\n");
scanf("%d,%d,%d",&i,&aa,&bb);
c[i].a=aa;
c[i].b=bb;//直接赋值修改
}//修改数据
main(){
int m;
while(1){
printf("输入:1-输入数据,2-修改数据,3-删除数据\n 4-插入数据 5-输出数据,0-退出\n");
scanf("%d",&m);
if(m==0) break;
else if(m==1) setnum();
else if(m==2) chang();
else if(m==3) removed();
else if(m==4) insertd();
else if(m==5) print();
}
}
这是补充的一部分代码