题目要求如下:
要求整个系统设计为图书信息输入模块、图书信息浏览模块、图书信息查询模块和图书信息删除与修改模块。
下面是我的程序:
#include <iostream>
#include <iomanip>
#include <string>
//输入/输出文件流类
#include <fstream>
using namespace std;
//最多的图书
const int Maxb=100;
//图书类,实现对图书的描述,图书的编号,书名,借出,还入等
class Book
{
private:
//删除标记 1:已删 0:未删
int tag;
//图书编号
int no;
//书名
int onshelf;
public:
Book(){}
//获取图书编号
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;
}
//输出图书
void disp()
{
cout << setw(6) << no << setw(18) << name << setw(10)
<<(onshelf==1? "在架":"已借") <<endl;
}
};
//图书库类,实现对图书的维护,查找,删除等
class BDatabase
{
private:
//图书记录指针
int top;
//图书记录
Book book[Maxb];
public:
//构造函数,将book.txt读到book[]中
BDatabase()
{
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=0;i<=top;i++)
if (book[i].getno()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
//图书库维护
void bookdata();
void disp()
{
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
//析构函数,将book[]写到book.txt文件中
~BDatabase()
{
fstream file("book.txt",ios::out);
for (int i=0;i<=top;i++)
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*****图 书 管 理*****
写不下了,
http://a163.com/UploadFiles/8577/C-tushuguanli.rar
放这儿了,。。。
哪位好心的大哥帮忙我修改下啊,,去掉里面的 图书状态(在架或者已借) 更正写入数据时的时的格式问题
懂C语言的进来帮下忙
你要知道一点就是编译器的运行是由上到下的,第一行 可以写声明个空函数 if(x>y)z=x;else z=y;当编译器运行到这了它不知道你的x和y的值是多少 就会报错 return(z)这里返还到哪里去 scanf("%d%d",&x,&y);编译器到这里才知道xy的值但它不会再返还if语句,z=max(x,y);没有max函...
C语言啊。。。求助。。帅哥美女们,大哥大姐们会的帮下忙。无限感激...
include<stdio.h> int main(){ int a[3];int i,max;int n;scanf("%d",&n);while(n--){ for(i=0;i<3;i++)scanf("%d",&a[i]);max=a[0];for(i=0;i<3;i++)if(a[i]>=max)max=a[i];printf("%d\\n",max);} return 0;} ...
c语言高手朋友们 进来帮个忙
我算了一下,到第二步后,结果只有126*126=15876种组合,是不是我的理解错了?我的理解是:从0123456789中分出5个数后,另5个数也就定了,所以只有C(10,5)=252个,其中有一半是前后相同的,所以只有126个,两组126个再两两组合,共有126*126=15876.按照这个思路,我写了一段程序,结果算...
编程达人帮下忙,在下感激不尽。
void main(){ double num[100],s,a,tem;int i,j,n;while(scanf("%d",&n)!=EOF){ for (i=0;i<n;i++)scanf("%lf",&num[i]);for (i=0;i<n;i++)for(j=i+1;j<n;j++)if(num[i]>num[j]){ tem=num[i];num[i]=num[j];num[j]=tem;} s=0.0;for(i=1;i...
C语言编程,帮个忙啦~
C语言编程,处理数组排序问题,帮助实现基本的字符数组排序。在C语言中,处理数组排序,尤其是字符数组排序,是编程基础中的重要一环。本文将介绍如何在Visual C++(简称VC)环境下调试并实现字符数组的排序功能。首先,我们编写一个函数 `sort(char a[][10],int n)` 来实现排序。函数接受一个二维字符...
关于C语言程序设计的几道题。学霸们帮一下忙吧。
第六题:include <stdio.h> include <string.h> int main(){ char str[100];gets(str);int t=strlen(str);for(int i=0;i<=t\/2;i++)if(str[i]!=str[t-i-1]){ printf("所输入的字符串不是回文字符串\\n");return 0;} printf("所输入的字符串是回文字符串\\n");} 第五题:...
c语言几个小小的问题 高手帮个忙
1. C 逗号在这里不合法 2. 输出2,虽然x是浮点型,但是10和4都是整型,所以先按整型运算,再将结果转换为浮点型 3. (++x, y++)表示这是一个逗号表达式,逗号表达式取最后一个表达式的值,也就是y++的值,所以输出结果是3和3 4. printf("%8.4g\\n",b); 这句输出8756,%g表示按%e或者...
C语言高手帮帮我!!!
i++=t*=i可以这样算.先算t*=i => t=(t*i); 再算 i++=t; => (i=t;i++;)第二题:第一次循环.k=1; if不运行得到a = b =s[1]-'0' 的ASC码.第二次循环k=2(也就是最后一次循环)=> a=s[1]-'0'+s[2]-'0'都用ASC码运算....
请C语言大神帮个忙
int mat[max][max],vis[max][max];void dfs(int x,int y){ if(!mat[x][y] || vis[x][y]) return;vis[x][y]=1;dfs(x-1,y-1);dfs(x-1,y+1);dfs(x-1,y);dfs(x,y-1);dfs(x,y+1);dfs(x+1,y-1);dfs(x+1,y+1);dfs(x+1,y);} void main(){ int i...
C语言问题,大家帮个忙谢谢
如果输入的是 0,则是 1 位数,正序、逆序都为 0。如果不是0,可以根据该数是几位数进行循环输出。这里提供了一种扩展性较强的算法,可以参考。代码中,k = 1000 表示当该数是 4 位数,然后通过循环来缩减 k 的值,从而从高到低输出每一位的数字(正序)。逆序的算法相对正序简单点,先通过 ...