① 求一個鏈表實現圖書管理系統的程序的編程(用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); } }}