求c语言编写电话薄实现添加删除修改就可以最好有图形菜单,没有也可以

求c语言编写电话薄实现添加删除修改就可以最好有图形菜单,没有也可以,第1张

声明: 非原创

#include "stdio.h" /*标准输入输出函数库*/

#include "stdlib.h" /*标准函数库*/

#include "string.h" /*字符串函数库*/

#include "conio.h" /*屏幕 *** 作函数库*/

#define HEADER1 "---------------------------TELEPHONE BOOK---------------------------\n"

#define HEADER2 " |num |name| phonenumber| address| \n"

#define HEADER3 " |--------------|------------|-----------------|---------------------| \n"

#define FORMAT " |%-10s| %-10s| %-15s |%-20s | \n"

#define DATA p->num,p->name,p->phonenum,p->address

#define END " ---------------------------------------------------------------------\n"

#define N 100

int saveflag=0 /*是否需要存盘的标志变量*/

/*定义与电话簿有关的数据结构*/

typedef struct telebook /*标记为telebook*/

{

char num[4] /*编号*/

char name[10] /*姓名*/

char phonenum[15] /*电话号码*/

char address[20]/*地址*/

}TELEBOOK

void menu() /*主菜单*/

{

system("cls") /*调用DOS命令,清屏.与clrscr()功能相同*/

textcolor(13) /*在文本模式中选择新的字符颜色*/

gotoxy(10,5) /*在文本窗口中设置光标*/

cprintf(" The telephone-book Management System \n")

gotoxy(10,8)

cprintf(" *************************Menu********************************\n")

gotoxy(10,9)

cprintf(" * 1 input record 2 display record *\n")

gotoxy(10,10)

cprintf(" * 3 delete record 4 search record *\n")

gotoxy(10,11)

cprintf(" * 5 modify record 6 insert record *\n")

gotoxy(10,12)

cprintf(" * 7 sortrecord 8 saverecord *\n")

gotoxy(10,13)

cprintf(" * 0 quitsystem *\n")

gotoxy(10,14)

cprintf(" *************************************************************\n")

/*cprintf()送格式化输出至文本窗口屏幕中*/

}

/*格式化输出表头*/

void printheader()

{

printf(HEADER1)

printf(HEADER2)

printf(HEADER3)

}

/*格式化输出表中数据*/

void printdata(TELEBOOK pp)

{

TELEBOOK* p

p=&pp

printf(FORMAT,DATA)

}

/*显示数组temp[]中存储的电话簿记录,内容为telebook结构中定义的内容*/

void Disp(TELEBOOK temp[],int n)

{

int i

if(n==0) /*表示没有电话簿记录*/

{

printf("\n=====>Not telephone record!\n")

getchar()

return

}

printf("\n\n")

printheader()/*输出表格头部*/

i=0

while(i<n)/*逐条输出数组中存储的电话簿记录*/

{

printdata(temp[i])

i++

printf(HEADER3)

}

getchar()

}

void Wrong() /*输出按键错误信息*/

{

printf("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n")

getchar()

}

void Nofind() /*输出未查找此记录的信息*/

{

printf("\n=====>Not find this telephone record!\n")

}

/*************************************************************

作用:用于定位数组中符合要求的记录,并返回保存该记录的数组元素下标值

参数:findmess[]保存要查找的具体内容nameorphonenum[]保存按什么在数组中查找

**************************************************************/

int Locate(TELEBOOK temp[],int n,char findmess[],char nameorphonenum[])

{

int i=0

if(strcmp(nameorphonenum,"phonenum")==0) /*按电话号码查询*/

{

while(i<n)

{

if(strcmp(temp[i].phonenum,findmess)==0) /*若找到findmess值的电话号码*/

return i

i++

}

}

else if(strcmp(nameorphonenum,"name")==0) /*按姓名查询*/

{

while(i<n)

{

if(strcmp(temp[i].name,findmess)==0) /*若找到findmess值的姓名*/

return i

i++

}

}

return -1/*若未找到,返回一个整数-1*/

}

/*输入字符串,并进行长度验证(长度<lens)*/

void stringinput(char *t,int lens,char *notice)

{

char n[255]

do{

printf(notice) /*显示提示信息*/

scanf("%s",n) /*输入字符串*/

if(strlen(n)>lens) printf("\n exceed the required length! \n")

/*进行长度校验,超过lens值重新输入*/

}while(strlen(n)>lens)

strcpy(t,n)/*将输入的字符串拷贝到字符串t中*/

}

/*增加电话簿记录*/

int Add(TELEBOOK temp[],int n)

{

char ch,num[10]

int i,flag=0

system("cls")

Disp(temp,n)/*先打印出已有的电话簿信息*/

while(1) /*一次可输入多条记录,直至输入编号为0的记录才结束添加 *** 作*/

{

while(1) /*输入记录编号,保证该编号没有被使用,若输入编号为0,则退出添加记录 *** 作*/

{

stringinput(num,10,"input number(press '0'return menu):")/*格式化输入编号并检验*/

flag=0

if(strcmp(num,"0")==0) /*输入为0,则退出添加 *** 作,返回主界面*/

{return n}

i=0

while(i<n) /*查询该编号是否已经存在,若存在则要求重新输入一个未被占用的编号*/

{

if(strcmp(temp[i].num,num)==0)

{

flag=1

break

}

i++

}

if(flag==1) /*提示用户是否重新输入*/

{ getchar()

printf("==>The number %s is existing,try again?(y/n):",num)

scanf("%c",&ch)

if(ch=='y'||ch=='Y')

continue

else

return n

}

else

{break}

}

strcpy(temp[n].num,num)/*将字符串num拷贝到temp[n].num中*/

stringinput(temp[n].name,15,"Name:")

stringinput(temp[n].phonenum,15,"Telephone:")

stringinput(temp[n].address,15,"Adress:")

saveflag=1

n++

}

return n

}

/*按编号或姓名,查询电话簿记录*/

void Qur(TELEBOOK temp[],int n)

{

int select/*1:按姓名查,2:按电话号码查,其他:返回主界面(菜单)*/

char searchinput[20]/*保存用户输入的查询内容*/

int p=0

if(n<=0) /*若数组为空*/

{

system("cls")

printf("\n=====>No telephone record!\n")

getchar()

return

}

system("cls")

printf("\n =====>1 Search by name =====>2 Search by telephone number\n")

printf(" please choice[1,2]:")

scanf("%d",&select)

if(select==1) /*按姓名查询*/

{

stringinput(searchinput,10,"input the existing name:")

p=Locate(temp,n,searchinput,"name")

/*在数组temp中查找编号为searchinput值的元素,并返回该数组元素的下标值*/

if(p!=-1) /*若找到该记录*/

{

printheader()

printdata(temp[p])

printf(END)

printf("press any key to return")

getchar()

}

else

Nofind()

getchar()

}

else if(select==2) /*按电话号码查询*/

{

stringinput(searchinput,15,"input the existing telephone number:")

p=Locate(temp,n,searchinput,"phonenum")

if(p!=-1)

{

printheader()

printdata(temp[p])

printf(END)

printf("press any key to return")

getchar()

}

else

Nofind()

getchar()

}

else

Wrong()

getchar()

}

/*删除电话簿记录:先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元素*/

int Del(TELEBOOK temp[],int n)

{

int sel

char findmess[20]

int p=0,i=0

if(n<=0)

{ system("cls")

printf("\n=====>No telephone record!\n")

getchar()

return n

}

system("cls")

Disp(temp,n)

printf("\n=====>1 Delete by name =====>2 Delete by telephone number\n")

printf("please choice[1,2]:")

scanf("%d",&sel)

if(sel==1)

{

stringinput(findmess,10,"input the existing name:")

p=Locate(temp,n,findmess,"name")

getchar()

if(p!=-1)

{

for(i=p+1i<ni++) /*删除此记录,后面记录向前移*/

{

strcpy(temp[i-1].num,temp[i].num)

strcpy(temp[i-1].name,temp[i].name)

strcpy(temp[i-1].phonenum,temp[i].phonenum)

strcpy(temp[i-1].address,temp[i].address)

}

printf("\n==>delete success!\n")

n--

getchar()

saveflag=1

}

else

Nofind()

getchar()

}

else if(sel==2) /*先按电话号码查询到该记录所在的数组元素的下标值*/

{

stringinput(findmess,15,"input the existing telephone number:")

p=Locate(temp,n,findmess,"phonenum")

getchar()

if(p!=-1)

{

for(i=p+1i<ni++) /*删除此记录,后面记录向前移*/

{

strcpy(temp[i-1].num,temp[i].num)

strcpy(temp[i-1].name,temp[i].name)

strcpy(temp[i-1].phonenum,temp[i].phonenum)

strcpy(temp[i-1].address,temp[i].address)

}

printf("\n=====>delete success!\n")

n--

getchar()

saveflag=1

}

else

Nofind()

getchar()

}

return n

}

/*修改电话簿记录。先按输入的联系人姓名查询到该记录,

然后提示用户修改该记录编号之外的值,编号不能修改*/

void Modify(TELEBOOK temp[],int n)

{

char findmess[20]

int p=0

if(n<=0)

{ system("cls")

printf("\n=====>No telephone number record!\n")

getchar()

return

}

system("cls")

printf("modify telephone book recorder")

Disp(temp,n)

stringinput(findmess,10,"input the existing name:")/*输入并检验该姓名*/

p=Locate(temp,n,findmess,"name")/*查询到该数组元素,并返回下标值*/

if(p!=-1) /*若p!=-1,表明已经找到该数组元素*/

{

printf("Number:%s,\n",temp[p].num)

printf("Name:%s,",temp[p].name)

stringinput(temp[p].name,15,"input new name:")

printf("Name:%s,",temp[p].phonenum)

stringinput(temp[p].phonenum,15,"input new telephone:")

printf("Name:%s,",temp[p].address)

stringinput(temp[p].address,30,"input new address:")

printf("\n=====>modify success!\n")

getchar()

Disp(temp,n)

getchar()

saveflag=1

}

else

{Nofind()

getchar()

}

return

}

/*插入记录:按编号查询到要插入的数组元素的位置,然后在该记录编号之后插入一个新数组元素。*/

int Insert(TELEBOOK temp[],int n)

{

char ch,num[10],s[10] /*s[]保存插入点位置之前的记录编号,num[]保存输入的新记录的编号*/

TELEBOOK newinfo

int flag=0,i=0,kkk=0

system("cls")

Disp(temp,n)

while(1)

{ stringinput(s,10,"please input insert location after the Number:")

flag=0i=0

while(i<n) /*查询该编号是否存在,flag=1表示该编号存在*/

{

if(strcmp(temp[i].num,s)==0) {kkk=iflag=1break}

i++

}

if(flag==1)

break/*若编号存在,则进行插入之前的新记录输入 *** 作*/

else

{ getchar()

printf("\n=====>The number %s is not existing,try again?(y/n):",s)

scanf("%c",&ch)

if(ch=='y'||ch=='Y')

{continue}

else

{return n}

}

}

/*以下新记录的输入 *** 作与Add()相同*/

while(1)

{ stringinput(num,10,"input new Number:")

i=0flag=0

while(i<n) /*查询该编号是否存在,flag=1表示该编号存在*/

{

if(strcmp(temp[i].num,num)==0) {flag=1break}

i++

}

if(flag==1)

{

getchar()

printf("\n=====>Sorry,The number %s is existing,try again?(y/n):",num)

scanf("%c",&ch)

if(ch=='y'||ch=='Y')

{continue}

else

{return n}

}

else

break

}

strcpy(newinfo.num,num)/*将字符串num拷贝到newinfo.num中*/

stringinput(newinfo.name,15,"Name:")

stringinput(newinfo.phonenum,15,"Telephone:")

stringinput(newinfo.address,15,"Adress:")

saveflag=1/*在main()有对该全局变量的判断,若为1,则进行存盘 *** 作*/

for(i=n-1i>kkki--) /*从最后一个组织元素开始往向移一个元素位置*/

{

strcpy(temp[i+1].num,temp[i].num)

strcpy(temp[i+1].name,temp[i].name)

strcpy(temp[i+1].phonenum,temp[i].phonenum)

strcpy(temp[i+1].address,temp[i].address)

}

strcpy(temp[kkk+1].num,newinfo.num) /*在kkk的元素位置后插入新记录*/

strcpy(temp[kkk+1].name,newinfo.name)

strcpy(temp[kkk+1].phonenum,newinfo.phonenum)

strcpy(temp[kkk+1].address,newinfo.address)

n++

Disp(temp,n)

printf("\n\n")

getchar()

return n

}

/*利用选择排序法实现数组的按记录编号或姓名的升序排序*/

void SelectSort(TELEBOOK temp[],int n)

{

int i=0,j=0,flag=0,indexmin,select

char charflag[10]

TELEBOOK newinfo

if(n<=0)

{ system("cls")

printf("\n=====>Not telephone record!\n")

getchar()

return

}

system("cls")

Disp(temp,n) /*显示排序前的所有记录*/

printf(" ==>1 SORT BY NUMBER ==>2 SORT BY NAME\n")

printf(" please choice[1,2]:")

scanf("%d",&select)

if(select==1) /*按记录编号排序*/

{

for(i=0i<n-1i++)

{

flag=32767indexmin=0

for(j=ij<nj++)

{ if(atoi(temp[j].num)<flag)

{ flag=atoi(temp[j].num)

indexmin=j

}

}

strcpy(newinfo.num,temp[i].num) /*利用结构变量newinfo实现数组元素的交换*/

strcpy(newinfo.name,temp[i].name)

strcpy(newinfo.phonenum,temp[i].phonenum)

strcpy(newinfo.address,temp[i].address)

strcpy(temp[i].num,temp[indexmin].num)

strcpy(temp[i].name,temp[indexmin].name)

strcpy(temp[i].phonenum,temp[indexmin].phonenum)

strcpy(temp[i].address,temp[indexmin].address)

strcpy(temp[indexmin].num,newinfo.num)

strcpy(temp[indexmin].name,newinfo.name)

strcpy(temp[indexmin].phonenum,newinfo.phonenum)

strcpy(temp[indexmin].address,newinfo.address)

}

Disp(temp,n) /*显示排序后的所有记录*/

saveflag=1

printf("\n=====>sort complete!\n")

getchar()

return

}

else if(select==2)

{

for(i=0i<n-1i++)

{

charflag[0]=255indexmin=0

for(j=ij<nj++)

{ if(strcmp(temp[j].name,charflag)>0)

{ charflag[0]=temp[j].name

indexmin=j

}

}

strcpy(newinfo.num,temp[i].num) /*利用结构变量newinfo实现数组元素的交换*/

strcpy(newinfo.name,temp[i].name)

strcpy(newinfo.phonenum,temp[i].phonenum)

strcpy(newinfo.address,temp[i].address)

strcpy(temp[i].num,temp[indexmin].num)

strcpy(temp[i].name,temp[indexmin].name)

strcpy(temp[i].phonenum,temp[indexmin].phonenum)

strcpy(temp[i].address,temp[indexmin].address)

strcpy(temp[indexmin].num,newinfo.num)

strcpy(temp[indexmin].name,newinfo.name)

strcpy(temp[indexmin].phonenum,newinfo.phonenum)

strcpy(temp[indexmin].address,newinfo.address)

}

Disp(temp,n) /*显示排序后的所有记录*/

saveflag=1

printf("\n=====>sort complete!\n")

getchar()

return

}

else

{Wrong()

getchar()

getchar()

return}

}

/*数据存盘,若用户没有专门进行此 *** 作且对数据有修改,在退出系统时, 会提示用户存盘*/

void Save(TELEBOOK temp[],int n)

{

FILE* fp

int i=0

fp=fopen("c:\\telephon","w")/*以只写方式打开文本文件*/

if(fp==NULL) /*打开文件失败*/

{

printf("\n=====>open file error!\n")

getchar()

return

}

for(i=0i<ni++)

{

if(fwrite(&temp[i],sizeof(TELEBOOK),1,fp)==1)/*每次写一条记录或一个结构数组元素至文件*/

{

continue

}

else

{

break

}

}

if(i>0)

{

getchar()

printf("\n\n=====>save file complete,total saved's record number is:%d\n",i)

getchar()

saveflag=0

}

else

{system("cls")

printf("the current link is empty,no telephone record is saved!\n")

getchar()

}

fclose(fp)/*关闭此文件*/

}

void main()

{

TELEBOOK tele[N]/*定义TELEBOOK结构体*/

FILE *fp /*文件指针*/

int select/*保存选择结果变量*/

char ch /*保存(y,Y,n,N)*/

int count=0 /*保存文件中的记录条数(或元素个数)*/

fp=fopen("C:\\telephon","a+")

/*以追加方式打开文本文件c:\telephon,可读可写,若此文件不存在,会创建此文件*/

if(fp==NULL)

{

printf("\n=====>can not open file!\n")

exit(0)

}

while(!feof(fp))

{

if(fread(&tele[count],sizeof(TELEBOOK),1,fp)==1) /*一次从文件中读取一条电话簿记录*/

count++

}

fclose(fp)/*关闭文件*/

printf("\n==>open file sucess,the total records number is : %d.\n",count)

getchar()

menu()

while(1)

{

system("cls")

menu()

printf("\n Please Enter your choice(0~8):") /*显示提示信息*/

scanf("%d",&select)

if(select==0)

{

if(saveflag==1) /*若对数组的数据有修改且未进行存盘 *** 作,则此标志为1*/

{ getchar()

printf("\n==>Whether save the modified record to file?(y/n):")

scanf("%c",&ch)

if(ch=='y'||ch=='Y')

Save(tele,count)

}

printf("\n===>thank you for useness!")

getchar()

break

}

switch(select)

{

case 1:count=Add(tele,count)break /*增加电话簿记录*/

case 2:system("cls")Disp(tele,count)break /*显示电话簿记录*/

case 3:count=Del(tele,count)break /*删除电话簿记录*/

case 4:Qur(tele,count)break /*查询电话簿记录*/

case 5:Modify(tele,count)break /*修改电话簿记录*/

case 6:count=Insert(tele,count)break /*插入电话簿记录*/

case 7:SelectSort(tele,count)break /*排序电话簿记录*/

case 8:Save(tele,count)break /*保存电话簿记录*/

default: Wrong()getchar()break /*按键有误,必须为数值0-9*/

}

}

}

`

首先,这个效果是不是单asp实现的,主要是在浏览器实现。

第二,这个效果是js实现的,也就是现在流行的ajax技术

简单解析:

asp只负责服务器的运行。参数由ajax中的xmlhttp组件传过来。

js将当前浏览页的一些内容删除,由通过解析xmlhttp返回内容,在页面的合适位置输出一些内容和修改一些内容。。

要是想做出这种效果可以查看ajax的一些文档。。

人个推荐使用一个ajax类,很方便:

请你到他的网站上看看

http://www.xujiwei.cn/works/ajaxrequest/

在这个演示及使用说明页上就有你要的效果。

你仔细看看要有不明白的地方,或认为回答不妥,百度消息我。

(在消息的内容里加上问题的网址哦)

`

#include <iostream>

#include <iomanip>

#include <string>

#include <fstream>//输入/输出文件流类

using namespace std

const int Maxr=100//最多的读者

const int Maxb=100//最多的图书

const int Maxbor=5//每位读者最多借五本书

//读者类,实现对读者的信息的描述

class Reader

{

private:

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

int no//读者编号

char name[10]//读者姓名

int borbook[Maxbor]//所借图书

public:

Reader() {}

char *getname() {return name} //获取姓名

int gettag() {return tag} //获取删除标记

int getno() {return no} //获取读者编号

void setname(char na[]) //设置姓名

{

strcpy(name,na)

}

void delbook(){ tag=1}//设置删除标记 1:已删 0:未删

void addreader(int n,char *na)//增加读者

{

tag=0

no=n

strcpy(name,na)

for(int i=0i<Maxbori++)

borbook[i]=0

}

void borrowbook(int bookid)//借书 *** 作

{

for(int i=0i<Maxbori++)

{

if (borbook[i]==0)

{

borbook[i]=bookid

return

}

}

}

int retbook(int bookid)//还书 *** 作

{

for(int i=0i<Maxbori++)

{

if(borbook[i]==bookid)

{

borbook[i]=0

return 1

}

}

return 0

}

void disp()//读出读者信息

{

cout <<setw(5) <<no <<setw(10) <<name<<"借书编号:["

for(int i=0i<Maxbori++)

if(borbook[i]!=0)

cout <<borbook[i] <<"|"

cout <<"]"<<endl

}

}

//读者类库,实现建立读者的个人资料

class RDatabase

{

private:

int top//读者记录指针

Reader read[Maxr]//读者记录

public:

RDatabase() //构造函数,将reader.txt读到read[]中

{

Reader s

top=-1

fstream file("reader.txt",ios::in)//打开一个输入文件

while (1)

{

file.read((char *)&s,sizeof(s))

if (!file)break

top++

read[top]=s

}

file.close()//关闭 reader.txt

}

void clear()//删除所有读者信息

{

top=-1

}

int addreader(int n,char *na)//添加读者时先查找是否存在

{

Reader *p=query(n)

if (p==NULL)

{

top++

read[top].addreader(n,na)

return 1

}

return 0

}

Reader *query(int readerid)//按编号查找

{

for (int i=0i<=topi++)

if (read[i].getno()==readerid &&

read[i].gettag()==0)

{

return &read[i]

}

return NULL

}

void disp() //输出所有读者信息

{

for (int i=0i<=topi++)

read[i].disp()

}

void readerdata()//读者库维护

~RDatabase() //析构函数,将read[]写到reader.txt文件中

{

fstream file("reader.txt",ios::out)

for (int i=0i<=topi++)

if (read[i].gettag()==0)

file.write((char *)&read[i],sizeof(read[i]))

file.close()

}

}

void RDatabase::readerdata()

{

char choice

char rname[20]

int readerid

Reader *r

while (choice!='0')

{

cout <<"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"<<endl

cin >>choice

switch (choice)

{

case '1':

cout <<"输入读者编号:"

cin >>readerid

cout <<"输入读者姓名:"

cin >>rname

addreader (readerid,rname)

break

case '2':

cout <<"输入读者编号:"

cin >>readerid

r=query(readerid)

if (r==NULL)

{

cout <<" 该读者不存在 "<<endl

break

}

cout <<"输入新的姓名:"

cin >>rname

r->setname(rname)

break

case '3':

cout <<" 输入读者编号:"

cin >>readerid

r=query(readerid)

if (r==NULL)

{

cout <<" 该读者不存在" <<endl

break

}

r->delbook()

break

case '4':

cout <<"读入读者编号:"

cin >>readerid

r=query(readerid)

if (r==NULL)

{

cout <<"该读者不存在"<<endl

break

}

r->disp()

break

case '5':

disp()

break

case '6':

clear()

break

default:cout<<"输入错误,请从新输入:"break

}

}

}

//图书类,实现对图书的描述,图书的编号,书名,借出,还入等

class Book

{

private:

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

int no//图书编号

char name[20]//书名

int onshelf//是否再架 1:再架 2:已借

public:

Book(){}

char *getname() { return name}//获取姓名

int getno(){ return no}//获取图书编号

int gettag(){ return tag}//获取删除标记

void setname(char na[])//设置书名

{

strcpy(name,na)

}

void delbook(){ tag=1}//删除图书

void addbook(int n,char *na)//增加图书

{

tag=0

no=n

strcpy(name,na)

onshelf=1

}

int borrowbook()//借书 *** 作

{

if (onshelf==1)

{

onshelf=0

return 1

}

return 0

}

void retbook()//还书 *** 作

{

onshelf=1

}

void disp()//输出图书

{

cout <<setw(6) <<no <<setw(18) <<name <<setw(10)

<<(onshelf==1? "在架":"已借") <<endl

}

}

//图书库类,实现对图书的维护,查找,删除等

class BDatabase

{

private:

int top//图书记录指针

Book book[Maxb]//图书记录

public:

BDatabase()//构造函数,将book.txt读到book[]中

{

Book b

top=-1

fstream file("book.txt",ios::in)

while (1)

{

file.read((char *)&b,sizeof(b))

if (!file) break

top++

book[top]=b

}

file.close()

}

void clear()//全删

{

top=-1

}

int addbook(int n,char *na)//增加图书

{

Book *p=query(n)

if (NULL==p)

{

top++

book[top].addbook(n,na)

return 1

}

return 0

}

Book *query(int bookid)//查找图书

{

for (int i=0i<=topi++)

if (book[i].getno()==bookid &&book[i].gettag()==0)

{

return &book[i]

}

return NULL

}

void bookdata()//图书库维护

void disp()

{

for (int i=0i<=topi++)

if (book[i].gettag()==0)

book[i].disp()

}

~BDatabase()//析构函数,将book[]写到book.txt文件中

{

fstream file("book.txt",ios::out)

for (int i=0i<=topi++)

if (book[i].gettag()==0)

file.write((char *)&book[i],sizeof(book[i]))

file.close()

}

}

void BDatabase::bookdata()

{

char choice

char bname[40]

int bookid

Book *b

while (choice!='0')

{

cout <<"\n\n\n\t\t\t图 书 维 护 "<<endl<<endl

cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 删 除\n\t\t4 查 找\n\t\t5 显 示\n\t\t6 全 删\n\t\t0 退 出"<<endl

cin >>choice

switch (choice)

{

case '1':

cout <<"输入图书编号:"<<endl

cin >>bookid

cout <<"输入图书书名:"<<endl

cin >>bname

addbook(bookid,bname)

break

case '2':

cout <<"输入图书编号:"<<endl

cin >>bookid

b=query(bookid)

if (b==NULL)

{

cout <<" 该图书不存在 "<<endl

break

}

cout <<"输入新的书名:"<<endl

cin >>bname

b->setname(bname)

break

case '3':

cout <<" 读入图书编号:"<<endl

cin >>bookid

b=query(bookid)

if (b==NULL)

{

cout <<" 该图书不存在" <<endl

break

}

b->delbook()

break

case '4':

cout <<" 读入图书编号:"<<endl

cin >>bookid

b=query(bookid)

if (b==NULL)

{

cout <<" 该图书不存在"<<endl

break

}

b->disp()

break

case '5':

disp()

break

case '6':

clear()

break

default:cout<<"输入错误,请从新输入:"

}

}

}

//main() 函数的实现,程序的主界面的引导

void main()

{

char choice

int bookid,readerid

RDatabase ReaderDB

Reader *r

BDatabase BookDB

Book *b

while(choice!='0')

{

cout <<endl<<endl<<"\t\t\t 图 书 管 理 系 统\n\n\n"

cout <<"\t\t\t1 借 书\n\n\t\t\t2 还 书 \n\n\t\t\t3 图 书 维 护\n\n\t\t\t4 读 者 维 护\n\n\t\t\t0 离 开"<<endl

cin >>choice

switch (choice)

{

case '1':

cout <<" 借书 读者编号:"

cin >>readerid

cout <<" 图书编号: "

cin >>bookid

r=ReaderDB.query(readerid)//按编号查找

if (NULL==r)

{

cout <<" 不存在该读者,不能借书"<<endl

break

}

b=BookDB.query(bookid)

if (b==NULL)

{

cout <<" 不存在该图书,不能借书"<<endl

break

}

if (b->borrowbook()==0)

{

cout <<" 该图书已借出,不能借书"<<endl

break

}

r->borrowbook(b->getno())

break

case '2':

cout<<"还书\n 读者编号:"

cin >>readerid

cout <<" 图书编号:"

cin >>bookid

r=ReaderDB.query(readerid)

if (r==NULL)

{

cout <<" 不存在该读者,不能还书" <<endl

break

}

b=BookDB.query(bookid)

if (b==NULL)

{

cout <<" 不存在该图书,不能还书" <<endl

break

}

b->retbook()

r->retbook(b->getno())

break

case '3':

BookDB.bookdata()

break

case '4':

ReaderDB.readerdata()

break

default:cout<<"输入错误,请从新输入:"

}

}

}

自己运行一下试试~


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11810461.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存