//-----------------------------------------------------------------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------------------------------------------------------------//
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <fstream.h>
#include <string.h>
#include <conio.h>
#pragma comment(lib,"winmm.lib")
#define NULL 0
#define LEN sizeof(struct books)/*定义结构体books的长度为LEN*/
#define FILENAME "workers.db"/*定义数据库文件名为books.db*/
int a=0,i;/*全局参数变量*/
void Cover() ;
struct books/*建立结构体*/
{
int id;/*书号*/
char title[100];/*书名*/
char press[100];/*出版社*/
char date[100];/*借出日期*/
char level[100];/*借出期限*/
char deposit[100];/*押金*/
char IC[100];/*会员号*/
char call[100];/*联系电话*/
struct books *next;/*建立单向链表*/
};
struct books *head,*p,*p1;/*建立指针结构体*/
void output(struct books *px)/*将输出信息分类,方便调用*/
{
printf ("书号:%d\n书名:%s\n出版社:%s\n借出日期:%s\n借出期限:%s\n押金:%s\n会员号:%s\n联系电话电话:%s\n",px->id,px->title,px->press,px->date,px->level,px->deposit,px->IC,px->call);
}
void input(int n,struct books *px)/*将输入档案分类,方便调用*/
{
switch(n)
{
case 1:
loop1:
printf ("请输入书号:");
scanf ("%d",&px->id);
if (px->id==0)
{
printf ("书号不能为0!\n");
goto loop1;
}
break;
case 2:printf ("请输入书名:");scanf ("%s",&px->title);break;
case 3:printf ("请输入出版社:");scanf ("%s",&px->press);break;
case 4:printf ("请输入借出日期:");scanf ("%s",&px->date);break;
case 5:printf ("请输入借出期限:");scanf ("%s",&px->level);break;
case 6:printf ("请输入押金:");scanf ("%s",&px->deposit);break;
case 7:printf ("请输入身份证号:");scanf ("%s",&px->IC);break;
case 8:printf ("请输入联系电话:");scanf ("%s",&px->call);break;
default:printf ("ERROR");
}
}
int menu()/*程序主菜单*/
{ int menu;
printf (" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf (" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf (" ◆◆ 主菜单 ◆◆\n");
printf (" ◆◆ 1.查看书籍档案 2.创建书籍档案 ◆◆\n");
printf (" ◆◆ 3.修改书籍档案 4.删除书籍档案 ◆◆\n");
printf (" ◆◆ 5.保存档案文件 0.退 出 程 序 ◆◆\n");
printf (" 请选择要进入的模块编号:");
loop2:
menu=getch();
if (menu<48||menu>54)
goto loop2;/*ASCII表中48相当于0,54相当于6。只有当用户输入规定的数字时程序才会执行,否则不显示任何信息*/
printf ("%c\n",menu);
return menu-48;
}
struct books *creat(void)/*利用链表创建一个书籍档案,程序核心*/
{
int n;
if (a==0)
{
p=p1=(struct books *)malloc(LEN);/*开辟一个新内存单元*/
for (n=1;n<=8;n++)input(n,p);
head=p;
head->next=NULL;
a=a+1;
}
else
{
for (n=1;n<=8;n++)input(n,p);
p1->next=p;
}
p1=p;
p=(struct books *)malloc(LEN);
p->next=NULL;
printf ("书籍档案创建成功!\n");
return(head);
};
void del()/*删除一个档案*/
{
int id;
printf ("请输入需要删除的书籍的书号:");
scanf("%d",&id);
if (head==NULL)
{
printf ("没有任何可供删除的档案\n");
goto end;
}
p=head;
while (id!=p->id&&p->next!=NULL)/*根据链表查找档案*/
{
p1=p;
p=p->next;
}
if (id==p->id)
{
if (p==head)head=p->next;
else p1->next=p->next;
printf ("该书籍档案已成功删除\n");
a=a-1;
}
else printf ("找不到该档案\n");
end:;
}
int viewfile()/*浏览所有书籍档案*/
{
struct books *p2;
p2=head;
if (head==NULL)
{
printf ("档案为空。");
return 0;
}
if (head!=NULL)
do{ output(p2);
printf ("\n");
p2=p2->next;
}while (p2!=NULL);
}
int searchid()/*根据书号查找档案*/
{
int id;
struct books *p4;
printf ("请输入需要查找的书籍的书号:");
scanf("%d",&id);
if (head==NULL)
{
printf ("没有任何可用的档案\n");
return 1;
}
p4=head;
while (id!=p4->id&&p4->next!=NULL)
{
p4=p4->next;
}
if (id==p4->id)output(p4);
else printf ("找不到该档案\n");
return 1;
}
void sortid(int id)/*根据书号排序...此能暂时还未完成*/
{
}
int modifyfile()/*修改一个档案*/
{
int id,b;
struct books *p3;
printf ("请输入需要修改的书籍的书号:");
scanf("%d",&id);
if (head==NULL)
{
printf ("没有任何可供修改的档案\n按任意键返回主菜单...");
getch();
return 0;;
}
p3=head;
while (id!=p3->id&&p3->next!=NULL)
{
p1=p3;
p3=p3->next;
}
if (id==p3->id)
{
printf ("该书籍档案已找到:\n");
output(p3);
printf ("请输入修改后的信息:\n");
for (b=1;b<=8;b++)input(b,p3);
Sleep(20);
printf ("档案保存中......\n修改后的档案已保存...\n按任意键返回主菜单...");
b=getch();
return 0;
}
}
int view()/*主菜单--〉查看书籍档案*/
{
int c;
char name[100];
int id;
start:
system ("cls");
system ("color 4e");
{ printf("-------------------------------------------------------------------------------");
printf("---------------------------------------------------------------------------------");
printf("\n\nЖЖЖЖЖЖ 欢 迎 进 入 图 书 管 理 系 统 这 里 有 你 它 更 精 彩 ЖЖЖЖЖЖ\n\n");
printf(" ◆主 菜 单◆ \n\n");
printf(" 查看书籍资料:\n\n 1.浏览全部书籍档案\n\n 2.根据书号查询\n\n 0.返回主菜单\n\n 请选择你要进入的编号:");
}
loop3:
c=getch();
if (c<48||c>53)goto loop3;/*只有当用户输入规定的数字时程序才会执行,否则不显示任何信息,有效避免误操作导致溢出*/
printf ("%c\n",c);
switch(c-48)
{
case 0:return 0;break;
case 1:
{
viewfile();
printf ("\n\n按任意键返回...");
getch();
goto start;
}
case 2:
{
searchid();
printf ("\n\n按任意键返回...");
getch();
goto start;
}
}
exit (0);
}
int savefile(void)/*保存文件*/
{
FILE *fp;
struct books *p5;
int i=0;
printf("\n\n\n\n");
printf("********** 保存文………**********\n");
p5=head;
if((fp=fopen(FILENAME,"wb"))==NULL)
{
printf("不能打开文件\n");
return 0;
}
do{
if(fwrite(p5,LEN,1,fp)!=1)
{
printf("文件写入错误!\n");
return 0;
}
p5=p5->next;
}while(p5!=NULL);
fclose(fp);
printf("\n\n\n\n");
printf("********** 保存文件成功!!!!**********\n");
return 1;
}
int loadfile(void)/*默认载入档案文件*/
{
FILE *fp;
int n=0;
while((fp=fopen(FILENAME,"rb"))==NULL)return 0;/*如果打开失败则返回0*/
do
{
if (a==0)p=p1=(struct books *)malloc(LEN);/*开辟一个新内存单元*/
if(fread(p,LEN,1,fp)!=1)break;
if (a==0)
{
head=p;
head->next=NULL;
a=a+1;
}
else
{
p1->next=p;
}
p1=p;
p=(struct books *)malloc(LEN);
p->next=NULL;
}while (p!=NULL);
printf ("\n\n\n 书籍资料打开成功!!!\n");
system("color 4e");
fclose(fp);
return 1;
}
void main()/*主程序代码*/
{ printf("》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》");
printf("《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《");
int quit;
head=NULL;
a=loadfile();/*打开数据文件*/
if (a==1)
{
printf ("\n\n 按任意键进入主菜单...");
getch();
}
loop:
{ system ("cls");
system("color 4e");
}
{ system ("color 2e");
Sleep(20);
char online[]={"\n\n\n\n\n\n\n\n 正 在 进 入 图 书 管 理 系 统 请 稍 等……\n"};
char bar[]={"...."};
int i,j,k=0,x=12,y=12;
for(i=0;i<=strlen(online)/3.4;)
{
system("cls");
if(k==4)
i++;
cout<<endl;
for(j=0;j<(75-strlen(online))/2;j++)/*行坐标定位*/
cout<<" ";
cout<<online; /*输出线条*/
cout<<endl;
for(j=0;j<(65-strlen(bar))/2;j++)
cout<<" ";
cout<<(i+4)*4<< " % Loading";
cout.write(bar,k);
cout<<endl;
for(j=0;j<10;j++)
cout<<endl;
for(j=0;j<24;j++)
cout<<" ";
for(j=0;j<24;j++)
cout<<" ";
cout<<endl;
for(j=0;j<10000000;j++);//延时效果
k++;
if(k>4)
k=0;}
}
system("cls");
system("color 1c");
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★");
printf("★★★★★★★★★★∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵∵★★★★★★★★★★\n Copyright ? 2011.12 25-4-10 Tencent.All Rights Reserved \n (此程序仅供学习使用)\n\n");
printf (" 制 作 团 队:25-4-10\n\n");
switch(menu())
{
case 0:
printf ("\n\n 您确定要退出程序吗?(Y/N)");
confirm:
quit=getch();
if (quit=='y'||quit=='Y')/*只有当用户输入y时程序退出*/
{
printf ("Y\n");
exit (0);
}
if (quit=='n'||quit=='N')/*只有当用户输入n时,返回主菜单*/
goto loop;
case 1:
view();
getch();
break;
case 2:
printf ("\n 正在创建书籍档案...\n");
creat();
printf ("\n 按任意键返回...");
getch();
break;
case 3:
modifyfile();
break;
case 4:
del();
printf ("\n 按任意键返回...");
getch();
break;
case 5:
savefile();
printf ("\n 按任意键返回...");
system ("pause");
break;
}
goto loop;
}
//-----------------------------------------------------------------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------------------------------------------------------------//