当前位置:首页 » 编程语言 » c语言用链表做图书管理系统
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言用链表做图书管理系统

发布时间: 2022-10-31 10:38:08

① 求一个链表实现图书管理系统的程序的编程(用c语言哦)

/*文件list.h*/
#ifndef LIST_H
#define LIST_H
struct librarian *creat(int );
void output(struct librarian *);
struct librarian *inseert(struct librarian * ,struct librarian *);
struct librarian *del(struct librarian *, long);
struct librarian *sort(struct librarian *);
#endif
/*文件list.cpp*/
#include<stdio.h>
#include<malloc.h>
#include"string.h"
#define LEN sizeof(LIB)
typedef struct librarian LIB;
struct librarian
{
char num[15] ;
char name[15];
int store;//cun chu liang
int lend;
char publishing[30];
LIB *next;
};
LIB *creat(int n)
{
LIB *head,*q, *p2;
int i;
head=p2=q=(LIB *)malloc(LEN);
printf("enter num, name,store, lend, publishing:\n");
scanf("%s%s%d%d%s",q->num,q->name,&q->store,&q->lend,q->publishing);
for(i=1;i<n;i++)
{
q=(LIB *)malloc(LEN);
printf("enter num, name,store, lend, publishing:\n");
scanf("%s%s%d%d%s",q->num,q->name,&q->store,&q->lend,q->publishing);
p2->next=q;
p2=q;
}
p2->next=0;
return head;
}
void output(LIB *p)
{
LIB *head=p;
if(p==0)printf("\nlist null\n");
else
while(p!=0)
{
printf("num: %s;\t name: %s ;\t store: %d ;\tlend: %d;\t publishing : %s; \n",p->num,p->name,p->store,p->lend,p->publishing);
p=p->next;
}
p=head;
}
LIB *insert(LIB *p, LIB *o)
{
LIB *head=p,*q;
if(p==0)
{
head=o;
o->next=0;
}
else if(strcmp(o->num,p->num)<0)
{
head=o;
o->next=p;
}
else
{
while(strcmp(o->num,p->num)>0&&p->next!=0)
{
q=p;
p=p->next;
}
if(p->next==0)
{
p->next=o;
o->next=0;
}
else
{
q->next=o;
o->next=p;
}
}
return head;
}
LIB *del(LIB *p,char *o)
{
LIB *head=p,*q;
if(p==0)
printf("\nlist null\n");
else if(strcmp(p->num,o)==0)
{
head=p->next;
free(p);
}
else
while(p!=0)
{
q=p;
p=p->next;
if(p==0)break;
if(strcmp(p->num,o)==0)
{
q->next=p->next;
free(p);
break;
}
}
return head;
}
LIB *sort(LIB *head)
{
LIB *p, *q;
if(head==0)return head;
p=head;
head=0;
while(p!=0)
{
q=p;
p=p->next;
head=insert(head,q);
}
return head;
}
int main()
{
LIB *p=0, *h=0, *q;
int m,a;
char n[15],num[15];
do
{
printf("建立图书链表--->1;\n打印图书链表--->2;\n插入图书记录--->3;\n删除图书记录--->4;\n按序号排序--->5;\n退出--->0;\n");
printf("enter your's choice:");
scanf("%d",&m);
switch(m)
{
case 1 :
printf("enter list lenght :");
scanf("%d",&a);
h=p=creat(a);
break;
case 2 :
p=h;
output(p);
break;
case 3 :
p=h;
printf("enter num, name,store, lend, publishing:\n");
q=(LIB *)malloc(LEN);
scanf("%s%s%d%d%s",q->num,q->name,&q->store,&q->lend,q->publishing);
h=p=insert(p,q);
break;
case 4 :
p=h;
printf("enter you want to delete num:");
scanf("%s",num);
h=p=del(p,num);
break;
case 5 :
p=h;
h=p=sort(p);
break;
default :
break;
}
}while(m);
}

② 用C语言编写一个简单的图书管理小程序

源代码如下:

#include<iostream>

#include<iomanip>

#include<string>

#include<fstream>

#include<stdio.h>

using namespace std;

const int maxb=10000; //最多的图书

class book//图书类

{

int tag; //删除标记1:已删0:未删

int number; //isbn书号

char name[20]; //书名

char author[10]; //主编

char number2[10];//版次

char position[20];//出版社

char time[20];//出版年

void addbook(int n,char *na,char *au,char *n2,char *da,char *ti,int pr) //增加图书
{

tag=0;

number=n;

price=pr;

strcpy(name,na);

strcpy(author,au);

strcpy(number2,n2);

strcpy(position,da);

strcpy(time,ti);

onshelf=1;

}

(2)c语言用链表做图书管理系统扩展阅读

1、源程序中,很多符号都是成对匹配出现的,为避免遗漏必须配对使用的符号。

2、用花括号括起来的部分,但从程序结构清晰,便于阅读、理解、维护的角度出发,建议在书写程序时应遵循以下规则,以养成良好的编程习惯。

3、一个说明或一条语句占一行,与该结构开始处的左花括号对齐。

③ c语言链表实现图书管理系统

#include <dos.h> #include <bios.h> #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define SPACE 0x3920 #define ESC 0x011b #define ENTER 0x1c0d #define Backspace 0xe08 #define ALT_B 12288 #define ALT_M 12800 #define ALT_H 8960 int key; int textx,texty; struct menustruct { char name[10]; char str[10][20]; int n; }ml[3]; typedef struct BookList { char num[20] char name[20] int price; char person[20] int yes struct BookList *next; }Book; 希望你能采纳~~

④ 求用c语言编的小型图书馆管理系统(链表的插入,排序,查询,删除)

你这个问题其实很简单,就是链表的全操作,少了一个排序而已,这是我学数据结构时写的程序,你参考一下。
#include<stdio.h>
#include<malloc.h>
#define null 0

typedef struct node
{
int data;
struct node *next;
}linklist;

linklist *creat(linklist *p)
{
linklist *p1,*p2;int length,i,m;
scanf("%d",&length);
for(i=1;i<=length;i++)
{
p1=(linklist*)malloc(sizeof(linklist));
scanf("%d",&m);
p1->data=m;
if(i==1)p=p1;
else p2->next=p1;
p2=p1;
}
p1->next=null;
return p;
}

void print(linklist *p)
{
while(p!=null)
{
printf("%d ",p->data);
p=p->next;
}
}

linklist *insert(linklist *p,int m)
{
int i;linklist *head,*r,*q;
r=(linklist*)malloc(sizeof(linklist));
scanf("%d",&r->data);
head=p;
for(i=1;i<m-1;i++)
p=p->next;
q=p->next;
p->next=r;
r->next=q;
return head;
}

void del(linklist *p,int n)
{
int i;linklist *q,*r;
for(i=1;i<n-1;i++)
p=p->next;
q=p->next;
q=q->next;
p->next=q;
}

void main()
{
int m,n;
linklist *head=null;
head=creat(head);
print(head);
printf("\n请输入插入元素的位置\n");
scanf("%d",&m);
head=insert(head,m);
print(head);
printf("\n请输入要删除元素的位置\n");
scanf("%d",&n);
del(head,n);
print(head);
}

你可以再加入一个排序函数
选择排序如下:
void paixu()
{
int a[max+1];int i,j,k,t;
for(i=1;i<=max;i++)
scanf("%d",&a[i]);
for(i=1;i<max;i++)//要找出max-1个大值
{
k=i;//标记
for(j=i+1;j<=max;j++)
if(a[j]<a[k])k=j;//记下较大值的位置,最后得到最大值的位置
if(k!=i)//表示第一个不是最大值
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
for(i=1;i<=max;i++)
printf("%d ",a[i]);
}
这里的啊a{i}要换成结点结构体里德成员,也就是按照这个成员的值来排序,例如书号。
直接插入排序:
void insert(int a[])//从小到大排序
{
int i,j;
for(i=2;i<=max;i++)
if(a[i]<a[i-1])
{
a[0]=a[i];
a[i]=a[i-1];
for(j=i-2;a[0]<a[j];j--)
a[j+1]=a[j];
a[j+1]=a[0];//仔细分析排序过程
}
}
要改动的和上一个一样。
如果你想将结果写到文件,下次再运行程序时上次的输入还存在,这个程序我也写过,不过我的是学生成绩管理系统,要的话发消息给我。

⑤ 用C语言编写图书资料信息管理系统,很急···

/*好吧,其实你可以上网看看,那么多的,你可以自己修改下*/
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#define NULL 0
#define LEN sizeof(struct student)

struct student
{
char name[20];
long int num;
char sex[4];
int age;
char address[30];
double tele_num;
char aihao[20];
struct student *next;
};//定义一个结构题

int TOTAL_NUM = 0;//学生总数
struct student *head = NULL;

void welcome (); //欢迎界面
void mainmenu (); //主界面
void record (); //记录数据
void insert(struct student *stu); //插入数据
void display(struct student *stu); //显示一个学生的信息
void displayAll (); //显示所有学生的信息
void query_by_num (); //按学号查询学生信息
void readData (); //读取文件里学生的信息
void writeData (); //向文件写入学生信息
void freeAll (); //清空链表内容
void del (); //删除学生信息
void change (); //更改学生信息
void devise (struct student *p); //选择更改内容

int main (void)
{
welcome ();
//显示主菜单
mainmenu ();
return 0;
}
//显示欢迎信息
void welcome ()
{
printf ("+----------------------------------------------------+\n");
printf ("| |\n");
printf ("| 欢迎使用网络工程学院信息安全092班学生信息管理系统 |\n");
printf ("| |\n");
printf ("+----------------------------------------------------+\n");
}

//系统主菜单
void mainmenu ()
{
int choice;
choice = -1;
readData ();
printf ("\n温馨提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n");
do
{
printf ("\n\n\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("\t\t\t+ 信息安全092班学生信息管理系统 |\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("\t\t\t+ [1]----录入学生信息 |\n");
printf ("\t\t\t+ [2]----浏览学生信息 |\n");
printf ("\t\t\t+ [3]----查询学生信息 |\n");
printf ("\t\t\t+ [4]----删除学生信息 |\n");
printf ("\t\t\t+ [5]----修改学生信息 |\n");
printf ("\t\t\t+ [0]----退出系统 |\n");
printf ("\t\t\t+*·*·*·*·*·*·*·*·*·*·*·*·*·*·*|\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("请输入您的选择:");
scanf ("%d", &choice);
switch (choice)
{
case 0:
writeData ();
freeAll ();
exit (0);
case 1:
record ();
break;
case 2:
displayAll ();
break;
case 3:
query_by_num ();
break;
case 4:
del ();
break;
case 5:
change ();
break;
default:
printf ("\n无效选项!");
break;
}
}
while (choice != 0);
}
//录入学生信息
void record ()
{
struct student *p0;

p0 = (struct student *)malloc(LEN);
printf ("请输入学生的姓名:");
scanf ("%s",p0->name);
printf ("请输入学生的学号:");
scanf ("%ld",&p0->num);
printf ("请输入学生的性别:");
scanf ("%s",p0->sex);
printf ("请输入学生的年龄:");
scanf ("%d",&p0->age);
printf ("请输入学生的地址:");
scanf ("%s",p0->address);
printf ("请输入学生的电话:");
scanf ("%lf",&p0->tele_num);
printf ("请输入学生的爱好:");
scanf ("%s",p0->aihao);

insert (p0);
printf ("该学生的信息为:\n");
printf ("-------------------------------------------------------------------------------\n");
printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n");
display (p0);
}

void insert (struct student *stu)
{
struct student *p0, *p1, *p2;

p1 = head;
p0 = stu;

if (head == NULL)
{
head = p0;
p0->next = NULL;
}
else
{
while ((p0->num > p1->num)&&(p1->next != NULL))
{
p2 = p1;
p1 = p1->next;
}
if (p0->num <= p1->num)
{

if (head == p1)
head = p0;
else
p2->next = p0;
p0->next = p1;
}
else
{
p1->next = p0;
p0->next = NULL;
}
}
TOTAL_NUM++;
}

void display (struct student *p)
{
printf ("%s\t%ld\t%d\t%s\t%s\t\t%.0f\t%s\n", p->name, p->num, p->age, p->sex, p->address, p->tele_num, p->aihao);
}
//浏览学生信息
void displayAll()
{
struct student *p;

printf("学生总数:%d\n", TOTAL_NUM);
p = head;
if (head != NULL)
{
printf("\n姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n");
printf("-------------------------------------------------------------------------------\n");
do
{
display(p);
p = p->next;
}
while(p != NULL);
}
printf ("\n");
}
//按学号查询学生信息
void query_by_num ()
{
int num;
struct student *p1;

printf("请输入学生的学号:");
scanf("%ld", &num);
if(head==NULL)
{
printf("无学生记录!\n");
return;
}
p1 = head;
while (num!=p1->num && p1->next!=NULL)
p1 = p1->next;
if (num == p1->num)
{
printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n");
printf ("-------------------------------------------------------------------------------\n");
display (p1);
}
else
printf ("没有该学生记录,请核对!");
}

//写入文件
void writeData ()
{
FILE* fp;//文件指针
struct student *p;

fp = fopen("1.txt", "w");
if (!fp)
{
printf("文件打开错误!");
return;
}

fprintf(fp,"%d\n", TOTAL_NUM);
for(p = head; p!= NULL; p= p->next)
{
fprintf(fp,"%s\t%ld\t%s\t%d\t%s\t%.0f\t%s\n", p->name, p->num, p->sex, p->age, p->address, p->tele_num, p->aihao);
}
fclose (fp);
}

void freeAll ()
{
struct student *p1, *p2;

p1 = p2=head;
while(p1)
{
p2=p1->next;
free (p1);
p1 = p2;
}
}
//读取文件
void readData ()
{
FILE* fp;//文件指针
struct student *p1, *p2;
fp = fopen("1.txt", "r");
if (!fp)
{
printf("文件打开错误!");
return;
}

fscanf(fp,"%d\n", &TOTAL_NUM);
head = p1 = p2 = (struct student *)malloc(LEN);
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao);
while(!feof(fp))
{
p1 = (struct student *)malloc(LEN);
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao);
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
fclose(fp);
}
//删除学生信息
void del ()
{
struct student *p1, *p2;
long int num;

if (head == NULL)
{
printf("无学生记录!\n");
return;
}

printf("请输入您要删除的学生的学号:");
scanf("%ld", &num);
p1 = head;

while (num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
{
if(p1 == head)
head = p1->next;
else p2->next = p1->next;
free(p1);
TOTAL_NUM--;
}
else
printf("没有该学生记录,请核对!\n");
}
//修改学生信息
void change ()
{
struct student *p1, *p2;
long int num;
if (head == NULL)
{
printf ("无学生记录!\n");
return;
}
printf ("请输入您要修改的学生的学号:");
scanf ("%ld", &num);
p1 = head;
while (num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
devise (p1);
else
printf("没有该学生记录,请核对!\n");
}

void devise (struct student *p)
{
int choice;
choice = -1;
do
{
printf("请选择您要修改的学生的信息内容:\n");
printf("+----------------------+\n");
printf("| 姓名 请按 1 |\n");
printf("| 学号 请按 2 |\n");
printf("| 性别 请按 3 |\n");
printf("| 年龄 请按 4 |\n");
printf("| 地址 请按 5 |\n");
printf("| 电话 请按 6 |\n");
printf("| 爱好 请按 7 |\n");
printf("| 取消 请按 0 |\n");
printf("+----------------------+\n");

printf("请输入您的选择:");
scanf("%d", &choice);

switch (choice)
{
case 0:
return;
case 1:
printf("请输入新姓名:");
scanf("%s", p->name);
break;
case 2:
printf("请输入新学号:");
scanf("%d", &p->num);
break;
case 3:
printf("请输入新性别:");
scanf("%s", p->sex);
break;
case 4:
printf("请输入新年龄:");
scanf("%s", &p->age);
break;
case 5:
printf("请输入新地址:");
scanf("%s", p->address);
break;
case 6:
printf("请输入新电话:");
scanf("%lf", &p->tele_num);
break;
case 7:
printf("请输入新爱好:");
scanf("%s", p->aihao);
break;
default:
printf("\n无效选项!");
break;
}
}
while(choice != 0);
}

⑥ 求帮忙用c语言做一个图书管理系统啊的课设啊。必有重谢!!!

建议楼主自己做锻炼一下,这算是一个很简单的编程,没涉及什么复杂算法。
你可以用一个结构体实现信息描述
typedef struct tablib{
char b_name[10];//名字长可以增加数组长度,下面设计数组的一样同上
char b_number[10];
int value;
char b_author[10];
int state_flag;
char name[10];
char sex[3];
char S_ID;
//如果用链表须在结构体中定义两个指向该结构体的指针,这里以单项链表为例说明
struct taglib *next;
}Lib;
函数实现着也比较简单,你自己实现就行,这个东西其实不难,动手做一下你就知道了,相信自己,有什么困难可以发邮件[email protected]

⑦ 看不太明白 怎么用C语言编写图书馆管理系统呢

通过c语言中的链表记录图书的信息、修改图书的信息、删除图书的信息、保存图书的信息、输出图书的信息啊、加载图书信息,记录,修改,删除很简单解决,保存的话,就用文件的输入输出就行了,同理就是加载信息,也是用文件的输入输出就行了。然后这些各个功能就单独作为一个函数,然后通过主函数去调用,就行了。

⑧ 纯C语言编写的图书管理系统,要求链表,跪求

//里面还不是很严谨,你自己可以再润色一下,其中的问题如果你懂的话,请不吝赐教,我也是刚起步的新人
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<iostream.h>
#include<string.h>
#include <dos.h>
typedef struct book_type
{
int NO_;//书编号
char name[50];//名字
char author[50];//作者
int num;//本数
struct book_type *next;
struct book_type *pre;
}book;
book *book_end,*book_first;//定义链表首与链表尾
/**************************重复操作***************************/
int again()//返回0不重复
{
char go_on;
printf("是否要继续操作?Y(y)/N(n):");
fflush(stdin);
scanf("%c",&go_on);
while(go_on!='y'&&go_on!='Y'&&go_on!='N'&&go_on!='n')//
{
printf("输入有误,请重新输入:");
fflush(stdin);
scanf("%c",&go_on);
}
if(go_on=='N'||go_on=='n') return 0;
else return 1;
}
/**************************增加图书***************************/
void add_book()
{
system("cls");
printf("\t\t\t\t 增加图书 \t\t\t\t\n");
int flag;
book *temp;
do
{
temp=(book *)malloc(sizeof(book));
if(temp==NULL)
{
cout<<"不能分配空间!清理内存空间后再试。"<<endl;//用printf,scanf好麻烦,见谅
// exit(0);
break;
}
cout<<"请输入书本号:";
cin>>temp->NO_;//如果你知道验证输入类型正确性,请加QQ365385495不吝赐教,谢谢
cout<<"请输入书本名字:";
cin>>temp->name;
cout<<"请输入作者名字:";
cin>>temp->author;
cout<<"请输入书本数量:";
cin>>temp->num;
if(book_end==NULL)
{
temp->next=temp;
temp->pre=temp;
book_first=temp;
book_end=temp;
}
else
{
temp->pre=book_end;
temp->next=book_first;
book_end->next=temp;
book_first->pre=temp;
book_end=temp;
}
flag=again();
}while(flag==1);

//cout<<book_first->pre->pre->NO_<<endl;
system("Pause");
}
/**************************删除图书***************************/
void del_book()
{
system("cls");
printf("\t\t\t\t 增加图书 \t\t\t\t\n");
int flag,i;
int node;
book *temp;
do
{
temp=book_first;
cout<<"请输入删除的节点编号:";
cin>>node;
if(temp==NULL)
{
cout<<"无任何图书消息"<<endl;
break;
// exit(0);
}
else
{
while(node<1)
{
cout<<"输入错误!重新输入"<<endl;
cin>>node;
}
for(i=1;i<node;i++)
{
temp=temp->next;
if(temp==book_first)
{
cout<<"没有该节点"<<endl;
break;
}
}
temp->pre->next=temp->next;
temp->next->pre=temp->pre;
if(node==1) book_first=temp->next;
free(temp);
flag=again();
}
}while(flag==1);

//cout<<book_first->pre->pre->NO_<<endl;
system("Pause");
}
/**************************查询图书***************************/
void ind_book()
{
system("cls");
printf("\t\t\t\t 查询图书 \t\t\t\t\n");
book *temp;
temp=book_first;
if(temp==NULL)
cout<<"无任何图书消息"<<endl;
else
do
{
cout<<"图书编号:"<<temp->NO_<<" "
<<"图书名字:"<<temp->name<<" "
<<"图书作者:"<<temp->author<<" "
<<"图书数量:"<<temp->num<<endl;
temp=temp->next;
}while(temp!=book_first);
system("Pause");
}
/**************************借书***************************/
void borrow()
{
system("cls");
printf("\t\t\t\t 借书 \t\t\t\t\n");
int flag,i;
char book_name[50];
book *temp;
do
{
temp=book_first;
cout<<"请输入希望借阅的书的名称:";
cin>>book_name;
if(temp==NULL)
{
cout<<"无任何图书消息"<<endl;
// exit(0);
}
else
{
while(strcmp(book_name,temp->name)&&temp->next!=book_first)
temp=temp->next;
if(strcmp(book_name,temp->name)) cout<<"没有该书"<<endl;
else
{
if(temp->num>0) temp->num-=1;
else cout<<"该书没有库存"<<endl;
}
}
flag=again();
}while(flag==1);

//cout<<book_first->pre->pre->NO_<<endl;
system("Pause");
}
/**************************还书***************************/
void ret()
{
system("cls");
printf("\t\t\t\t 借书 \t\t\t\t\n");
int flag,i;
char book_name[50];
book *temp;
do
{
temp=book_first;
cout<<"请输入归还的书的名称:";
cin>>book_name;
if(temp==NULL)
{
cout<<"无任何图书消息"<<endl;
// exit(0);
}
else
{
while(strcmp(book_name,temp->name)&&temp->next!=book_first)
temp=temp->next;
if(strcmp(book_name,temp->name)) cout<<"没有该书"<<endl;
else temp->num+=1;
}
flag=again();
}while(flag==1);

//cout<<book_first->pre->pre->NO_<<endl;
system("Pause");}
/**************************主函数***************************/
int main()
{
int flag;
int action;
book_first=book_end=NULL;
while(1)
{
system("cls");
printf("\t\t/*******It is a library system********/\t\t\t\n");
printf("\t\t\t1. 增加图书\t\t\t\n");
printf("\t\t\t2. 删除图书\t\t\t\n");
printf("\t\t\t3. 查询图书\t\t\t\n");
printf("\t\t\t4. 借书\t\t\t\t\n");
printf("\t\t\t5. 还书\t\t\t\t\n");
printf("\t\t\t0. 退出程序\t\t\t\n");
printf("请输入你的操作:");
do
{
flag=0;
fflush(stdin);
scanf("%d",&action);
switch(action)
{
case 1:add_book();break;
case 2:del_book();break;
case 3:ind_book();break;
case 4:borrow();break;
case 5:ret();break;
case 0:exit(0);break;
default:
flag=1;
printf("输入错误,请重新输入:");
}
}while(flag);
}

}

⑨ 用C语言设计和实现一个“图书信息管理系统”,满足以下要求:

const int MAXLEN=100;int count; //记录书籍数量char fName[20]="backup.dat"; //磁盘文件:书籍信息文件名 int LEN; //全局变量,通讯录中当前联系人总数int n;char *key;
typedef struct book //联系人数据结构
{ char no[20]; //序号 char book_name[20]; // 书名 char writer[30]; //作者名 char booknum[20]; //书籍分类 char press[20]; //出版单位 char price[10]; //书籍价格 }BOOK;BOOK b[MAXLEN];
typedef struct index{ int len; //数组长度 BOOK b[MAXLEN]; //指针数组}Index;
int Select();int Menu(void);int SubMenu2(void);int SubMenu4(void);int addbook(BOOK b[]);int output(BOOK b[]);int deletebook(BOOK b[]);void printno(BOOK b[]);int modifyIndo(BOOK b[]);int Save(BOOK b[]); int loaddata(BOOK b[]);int Copy(void);void New(BOOK b[]);int Load(BOOK b[]);void List(BOOK b[]);//void findbook(char *name,BOOK b[],char *key);
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<memory.h>int main(int argc, char* argv[]){ int select=0;
/*int select;用户所选的菜单项代码: 主菜单:1 查找图书信息、2 更新图书信息 、3 备份图书信息、0 退出程序 更新图书信息子菜单:21 新增图书信息、 22 编辑图书信息、 23 删除图书信息、 20 返回主菜单 查看图书信息子菜单:11 图书信息库 、12书名查找、13 作者名查找、14 序号查找 */
BOOK b[MAXLEN]; memset(b,0,sizeof(b)); //将b初始化为空,memory.h loaddata(b); //从图书库文件中读取信息 //循环显示菜单,供用户选择 do{
if(select<10||select==20||select==40) select=Menu(); else if(select>20 && select<30) select=SubMenu2(); else if(select>40 && select<50) select=SubMenu4(); switch(select) { case 11:// 图书信息库 break; case 12://书名查找 break;
case 13://作者名查找 break; case 14://类别查找 break;
case 21://新增图书信息、 break; case 22://编辑图书信息、 break; case 23://删除图书信息、 break; case 20://返回主菜单 break; case 3: system("cls"); Save(b); Copy(); break; case 0://退出程序 break; } }while(select!=0); return 0;}
int SubMenu4(void){ char menu; do{ system("cls");//清屏,需要使用到stdlib.h puts("\n\t======更新图书信息======\n"); puts("\t 1.新增图书信息"); puts("\t 2.删除图书信息"); puts("\t 3.编辑图书信息"); puts("\t 0.返回主菜单"); puts("\n\t=================="); printf("\t请选择:");//提示选择 menu=getche(); switch(menu) { case '0': puts("\n\n\t返回主菜单!"); break; case '1': addbook(b); break; case '2': deletebook(b); break; case '3': modifyIndo(b); break; default: puts("\n\n\t选择错误!"); menu='9'; } }while(menu=='9'); return 40+menu-'0';}
void New(BOOK b[]){ int t=0; //找到BOOK中第一个空的位置,存放新输入 if(LEN>=MAXLEN) { printf("\n\n\t图书库已满!"); return ; }
while(strcmp(b[t].book_name,"")!=0) //找到b中第一个空的位置t t++; addbook(b); //新增,输入 LEN++; //增1}
int modifyIndo(BOOK b[])//编辑图书信息{ char no[20]; int i; printno(b);again: printf("\n请输入你想要编辑的书籍编号:"); fflush(stdin); gets(no); for(i=0;i<=count;i++) { if(strcmp(no,b[i].no)==0) break; } if(i>count) { printf("对不起,你输入的编号不存在,是否继续?Y/N:"); if((getchar()=='Y')||(getchar()=='y')) goto again; else return 0; } printf("\n正在修改《%s》的信息……\n",b[i].book_name); printf("请输入图书的名字:"); gets(b[i].book_name); printf("请输入图书的作者名:"); gets(b[i].writer); printf("请输入书籍类别:"); gets(b[i].booknum); printf("请输入书籍的出版单位:"); gets(b[i].press); printf("请输入书籍的价格:"); gets(b[i].price); printf("\n图书信息编辑成功!\n");

}
void printno(BOOK b[]){ int i; printf("\n当前库存中的书籍目录:\n"); for( i=0;i<=count;i++) { printf("%s %s ",b[i].no,b[i].book_name); if(i%3==0&&i>0) printf("\n"); }}
int output(BOOK b[]) //输出图书信息{ if(count<0) { printf("对不起,当前图书数量为0\n"); return 0; } for(int i=0;i<=count;i++) { printf("\n*************************书籍信息*****************************\n"); printf("序号:%s\n",b[i].no); printf("书名:%s\n",b[i].book_name); printf("作者名:%s\n",b[i].writer); printf("书籍类别:%s\n",b[i].booknum); printf("出版单位:%s\n",b[i].press); printf("书籍价格:%s\n",b[i].price); } return 1; }
int deletebook(BOOK b[]) { char no[20]; int i; printno(b);loop: printf("\n请输入你要删除的书籍编号:"); fflush(stdin); gets(no); for(i=0;i<=count;i++) { if(strcmp(no,b[i].no)==0) break; } if(i>count) { printf("对不起,你输入的编号不存在,是否继续?Y/N:"); if((getchar()=='Y')||(getchar()=='y')) goto loop; else return 0; } printf("您确定要删除《%s》吗?Y/N:",b[i].book_name); if((getchar()=='Y')||(getchar()=='y'))
{ if(i==count) { count--; } else { for(;i<=count;i++) { b[i]=b[i+1]; count--; }
}
} else return 0; }
int loaddata(BOOK b[]){ int i=0; //i:b数组的下标 FILE *fp=fopen(fName,"r"); if(!fp) { printf("\n\t对不起,路径或者文件错误,无法读入!请重新增加!"); getch(); return 0; } fscanf(fp,"书籍编号\t书名\t作者\t类别\t出版单位\t价格"); while((!feof(fp))) { fscanf(fp,"\n%s\t%s\t%s\t%s\t%s\t%s",&b[i].no,&b[i].book_name,&b[i].writer,&b[i].booknum,&b[i].press,&b[i].price); i++; } count=i; fclose(fp); printf("加载成功!!"); return 1;}
int Select(){ int i=0; int c; //c:scanf输入的返回值,输入成功返回1;否则返回0 printf("\n\t请按需要选择图书信息:"); c=scanf("%d",&i); while(i<1 || i>LEN) { printf("\n\t输入错误!请按序号选择图书信息:"); if(c==0) fflush(stdin); c=scanf("%d",&i); } return i-1;} int addbook(BOOK b[]) //增加图书信息{ int i=0; char c; printf("\n*******************************新增图书信息****************************\n"); for(;;i++) { if(i>=MAXLEN) { printf("\n对不起,库存已满!不能继续添加。"); } printf("请输入图书的序号:"); gets(b[i].no); printf("请输入图书的名字:"); gets(b[i].book_name); printf("请输入图书的作者名:"); gets(b[i].writer); printf("请输入书籍类别:"); gets(b[i].booknum); printf("请输入书籍的出版单位:"); gets(b[i].press); printf("请输入书籍的价格:"); gets(b[i].price); printf("图书增加成功!\n"); printf("请问您要继续添加书籍信息吗?(Y/N): "); c=getchar(); if(c=='Y'||c=='y') { getchar(); printf("\n"); continue; } else break; } count=i; return i;
}//查重。int Duplicate(char *name,BOOK b[],char *original){ int i,j; int p=0; //重复标志:1 重复 ,0 没有重复 if(strcmp(name,original)!=0) for(i=0,j=0;j<LEN;) { while(strcmp(b[i].book_name,"")==0) i++;
if(strcmp(name,b[i].book_name) ==0) { p=1; printf("\n\t重复!请重新输入:"); break; } i++; j++; } return p; }int SubMenu2(void){ char menu,*name; do{ system("cls"); //清屏,需要使用到stdlib.h puts("\n\t======查找图书信息======\n"); puts("\t 1.图书信息库"); puts("\t 2.书名查找"); puts("\t 3.作者名查找"); puts("\t 4.序号查找"); puts("\t 0.返回主菜单"); puts("\n\t=================="); printf("\t请选择:"); //提示选择 menu=getche(); switch(menu) { case '0': puts("\n\n\t返回主菜单!"); break; case '1': output(b); getch(); break; case '2': //findbook(name,b,key); getch(); break; case '3': case '4': printno(b); break; default: puts("\n\n\t选择错误!"); menu='9'; } }while(menu=='9'); return 20+menu-'0';}
int Menu(void){ char menu; do{ system("cls"); puts("\n\t======主菜单======\n"); puts("\t 1.查找图书信息"); puts("\t 2.更新图书信息"); puts("\t 3.备份图书信息"); puts("\t 0.退出程序"); puts("\n\t=================="); printf("\t请选择:"); //提示选择 menu=getche(); switch(menu) //将用户输入的选项menu转换成系统定义的菜单代码 {
case '0': puts("\n\n\t退出程序!"); menu=menu-'0'; break;
case '2': menu=SubMenu4();
break; case '3': menu=menu-'0';
break; case '1': menu=SubMenu2();
break; default: puts("\n\n\t选择错误!"); menu='9'; //输入了无效的菜单代码,需要重新输入 } }while(menu=='9'); return menu;}
int Load(BOOK b[]){ FILE *fin; int i=0; fin=fopen(fName,"rb"); if(!fin) { printf("\n\t书籍信息不存在,请先新增加图书信息!\n\n按任意键继续……"); getch(); return 0; } while(1) { fread(&b[i],sizeof(BOOK),1,fin); if(feof(fin)) break; i++; } fclose(fin); LEN=i; return i;
}
int Save(BOOK b[])//存入文件 {
int i; //i:b数组的下标 FILE *fp=fopen(fName,"w"); if(!fp) { printf("\n\t不能正确保存书籍信息!按任意键继续……"); getch(); return 0; } fprintf(fp,"书籍编号\t书名\t作者\t类别\t出版单位\t价格"); for( i = 0; i <=count; i++) { fprintf(fp,"\n%s\t%s\t%s\t%s\t%s\t%s",b[i].no,b[i].book_name,b[i].writer,b[i].booknum,b[i].press,b[i].price); } fclose(fp); printf("保存成功!!"); return 1;}
int Copy(void) //备份图书信息,复制图书信息文件{ FILE *fout,*fin; BOOK *p=(BOOK *)malloc(sizeof(BOOK)); //存放从图书信息库读入的临时数据 char name[20];
fin=fopen(fName,"rb"); if(!fin) { printf("\n\t没有此图书信息!"); return 0; }
do{ printf("\n\t请输入备份文件名:"); scanf("%s",name); strcat(name,".bak"); fout=fopen(name,"wb"); if(!fout) printf("\t无效文件名或路径!\n"); }while(!fout);
while(1) { fread(p,sizeof(BOOK),1,fin); if(feof(fin)) break; fwrite(p,sizeof(BOOK),1,fout); }
printf("\n\t备份成功!"); free(p); return 1;}
void findbook(char *name,BOOK b[],char *key){
int i,j; //i:数组下标 j:除姓名为空串以外的实际人数 int p=0; printf("请输入您需要查找图书信息的书名:"); scanf("%s",name); if(strcmp(name,key)!=0) for(i=0,j=0;j<LEN;) { while(strcmp(b[i].book_name ,"")==0) i++; if(strcmp(name,b[i].book_name) ==0) { p=1; printf("\n%s\t%s\t%s\t%s\t%s\t%s",&b[i].no,&b[i].book_name,&b[i].writer,&b[i].booknum,&b[i].press,&b[i].price); } }}