图书馆管理系统分析

图书馆管理系统分析

图书管理:增加图书、修改图书、删除图书

               借阅管理:查找图书、借阅图书、归还图书

               读者管理:增加读者、删除读者

 

基于c++的应用软件基本架构

 

头文件

using namespace std;

 

数据类1{

public:

         带参构造函数;

         无参构造函数;

         get/set函数;

         一些必要的处理数据函数;

         运算符重载函数;

private:

         基本数据成员;

         数据对象成员;

};

...

操作类1{

public:

         带参/无参构造函数;//完成必要的初始化操作(例如从文件读数据初始化相关的集合对象及其他数据成员,调用菜单函数)

         功能实现函数;

         voidmenu();

         辅助函数;

         voidload();//读文件中的相关数据到集合数据成员

         voidsave();//将更新的数据成员信息写到文件中

         析构函数

private:

         由数据类构成的集合对象;

         其他数据成员;

}

....

 

登录验证类{

public:

         构造函数;//从密码文件读取信息并初始化集合对象

         //1.对用户输入的登录信息结合密码对象进行合法验证

         //2.对合法用户:确定用户具体角色,并生成对应的操作类对象,执行对应操作类功能;

         voidlogin();

private:

         含密码信息的集合对象;

}

 

int main(){

         定义验证类对象;

         调用验证类的login函数;

         return0;

}       

1.  #include

2.  using namespace std;  

3.  //首先定义一系列常量  

4.  const int MaxRead=100;//最多的读者  

5.  const int MaxBook=100;//最多的图书  

6.  const int MaxBookRead=5;//每位读者最多借五本书  

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

8.    

9.  class Reader  

10.{  

11.//定义类的私有成员  

12.private:  

13.    int flag;  //删除标记 1:已删 0:未删  

14.    int no;   //读者编号  

15.    char name[10];  //读者姓名  

16.    int borbook[MaxBookRead];//所借图书  

17.//定义类的公有成员  

18.public:  

19.    Reader() {}//构造函数:作用是初始化的操作  

20.    char *getname()  

21.    {  

22.        return name;   //获取姓名  

23.    }  

24.    int gettag()  

25.    {  

26.        return flag;   //获取删除标记  

27.    }  

28.    int getno()  

29.    {  

30.        return no;   //获取读者编号  

31.    }  

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

33.    {  

34.        strcpy(name,na);  

35.    }  

36.    void delbook()  

37.    {  

38.        flag=1;     //设置删除标记 1:已删 0:未删  

39.    }  

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

41.    {  

42.        flag=0;  

43.        no=n;  

44.        strcpy(name,na);  

45.        for(int i=0; i; i++)  

46.            borbook[i]=0;  

47.    }  

48.    void borrowbook(int bookid)//借书操作  

49.    {  

50.        for(int i=0; i; i++)  

51.        {  

52.            if (borbook[i]==0)  

53.            {  

54.                borbook[i]=bookid;  

55.                return;  

56.            }  

57.        }  

58.    }  

59.    int retbook(int bookid)//还书操作  

60.    {  

61.        for(int i=0; i; i++)  

62.        {  

63.            if(borbook[i]==bookid)  

64.            {  

65.                borbook[i]=0;  

66.                return 1;  

67.  

68.            }  

69.        }  

70.        return 0;  

71.    }  

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

73.    {  

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

75.        for(int i=0; i; i++)  

76.            if(borbook[i]!=0)  

77.                cout << borbook[i] << "|";  

78.        cout << "]"<;  

79.  

80.    }  

81.};  

82.  

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

84.class RDatabase  

85.{  

86.//定义类的私有成员  

87.private:  

88.    int top;       //读者记录指针  

89.    Reader read[MaxRead];//读者记录  

90.//定义类的私有成员  

91.public:  

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

93.    {  

94.        Reader s;  

95.        top=-1;  

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

97.        while (1)//加入死循环中  

98.        {  

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

100.                if (!file)break;  

101.                top++;  

102.                read[top]=s;  

103.            }  

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

105.        }  

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

107.        {  

108.            top=-1;  

109.        }  

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

111.        {  

112.            Reader *p=query(n);  

113.            if (p==NULL)  

114.            {  

115.                top++;  

116.                read[top].addreader(n,na);  

117.                return 1;  

118.            }  

119.            return 0;  

120.      

121.        }  

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

123.        {  

124.            for (int i=0; i<=top; i++)  

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

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

127.                {  

128.                    return &read[i];  

129.                }  

130.            return NULL;  

131.        }  

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

133.        {  

134.            for (int i=0; i<=top; i++)  

135.                read[i].disp();  

136.        }  

137.        void readerdata();//读者库维护  

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

139.        {  

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

141.            for (int i=0; i<=top; i++)  

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

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

144.            file.close();  

145.        }  

146.    };  

147.    void RDatabase::readerdata()  

148.    {  

149.      

150.        char choice;  

151.        char rname[20];  

152.        int readerid;  

153.        Reader *r;  

154.        while (choice!='0')  

155.        {  

156.            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   退      "<;  

157.            cin >> choice;  

158.            switch (choice)  

159.            {  

160.            case '1':  

161.                cout << "输入读者编号:";  

162.                cin >> readerid;  

163.                cout << "输入读者姓名:";  

164.                cin >> rname;  

165.                addreader (readerid,rname);  

166.                break;  

167.            case '2':  

168.                cout << "输入读者编号:";  

169.                cin >> readerid;  

170.                r=query(readerid);  

171.                if (r==NULL)  

172.                {  

173.                    cout << " 该读者不存在  "<;  

174.                    break;  

175.                }  

176.                cout << "输入新的姓名:";  

177.                cin >> rname;  

178.                r->setname(rname);  

179.                break;  

180.            case '3':  

181.                cout << " 输入读者编号:";  

182.                cin >> readerid;  

183.                r=query(readerid);  

184.                if (r==NULL)  

185.                {  

186.                    cout <<该读者不存在<< endl;  

187.                    break;  

188.                }  

189.                r->delbook();  

190.                break;  

191.            case '4':  

192.                cout << "读入读者编号:";  

193.                cin >> readerid;  

194.                r=query(readerid);  

195.                if (r==NULL)  

196.                {  

197.                    cout <<"该读者不存在"<< endl;  

198.                    break;  

199.                }  

200.                r->disp();  

201.                break;  

202.            case '5':  

203.                disp();  

204.                break;  

205.            case '6':  

206.                clear();  

207.                break;  

208.            default:  

209.                cout<<"输入错误,请从新输入:";  

210.                break;  

211.            }  

212.        }  

213.    }  

214.      

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

216.    class Book  

217.    {  

218.    //定义类的私有成员  

219.    private:  

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

221.        int no;//图书编号  

222.        char name[20];//书名  

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

224.    //定义类的私有成员  

225.    public:  

226.        Book() {}  

227.        char *getname()  

228.        {  

229.            return name;    //获取姓名  

230.        }  

231.        int getno()  

232.        {  

233.            return no;    //获取图书编号  

234.        }  

235.        int gettag()  

236.        {  

237.            return tag;    //获取删除标记  

238.        }  

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

240.        {  

241.            strcpy(name,na);  

242.        }  

243.        void delbook()  

244.        {  

245.            tag=1;   //删除图书  

246.        }  

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

248.        {  

249.            tag=0;  

250.            no=n;  

251.            strcpy(name,na);  

252.            onshelf=1;  

253.        }  

254.        int borrowbook()//借书操作  

255.        {  

256.            if (onshelf==1)  

257.            {  

258.                onshelf=0;  

259.                return 1;  

260.            }  

261.            return 0;  

262.        }  

263.        void retbook()//还书操作  

264.        {  

265.            onshelf=1;  

266.        }  

267.        void disp()//输出图书  

268.        {  

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

270.                 <<(onshelf==1? "在架":"已借") <;  

271.        }  

272.    };  

273.      

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

275.    class BDatabase  

276.    {  

277.    private:  

278.        int top;         //图书记录指针  

279.        Book book[MaxBook]; //图书记录  

280.    public:  

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

282.        {  

283.            Book b;  

284.            top=-1;  

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

286.            while (1)  

287.            {  

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

289.                if (!file) break;  

290.                top++;  

291.                book[top]=b;  

292.            }  

293.            file.close();  

294.        }  

295.        void clear()//全删  

296.        {  

297.            top=-1;  

298.        }  

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

300.        {  

301.            Book *p=query(n);  

302.            if (NULL==p)  

303.            {  

304.                top++;  

305.                book[top].addbook(n,na);  

306.                return 1;  

307.            }  

308.            return 0;  

309.        }  

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

311.        {  

312.            for (int i=0; i<=top; i++)  

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

314.                {  

315.                    return &book[i];  

316.                }  

317.            return NULL;  

318.        }  

319.        void bookdata();//图书库维护  

320.        void disp()  

321.        {  

322.            for (int i=0; i<=top; i++)  

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

324.                    book[i].disp();  

325.        }  

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

327.        {  

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

329.            for (int i=0; i<=top; i++)  

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

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

332.            file.close();  

333.        }  

334.    };  

335.    void BDatabase::bookdata()  

336.    {  

337.        char choice;  

338.        char bname[40];  

339.        int bookid;  

340.        Book *b;  

341.        while (choice!='0')  

342.        {  

343.            cout <<"\n\n\n\t\t\t       "<;  

344.            cout<<"\t\t1        \n \t\t2        \n\t\t3        \n\t\t4        \n\t\t5        \n\t\t6        \n\t\t0   退     "<;  

345.            cin >> choice;  

346.            switch (choice)  

347.            {  

348.            case '1':  

349.                cout << "输入图书编号:"<;  

350.                cin >> bookid;  

351.                cout << "输入图书书名:"<;  

352.                cin >> bname;  

353.                addbook(bookid,bname);  

354.                break;  

355.            case '2':  

356.                cout << "输入图书编号:"<;  

357.                cin >> bookid;  

358.                b=query(bookid);  

359.                if (b==NULL)  

360.                {  

361.                    cout << " 该图书不存在  "<;  

362.                    break;  

363.                }  

364.                cout << "输入新的书名:"<;  

365.                cin >> bname;  

366.                b->setname(bname);  

367.                break;  

368.            case '3':  

369.                cout <<读入图书编号:"<;  

370.                cin >> bookid;  

371.                b=query(bookid);  

372.                if (b==NULL)  

373.                {  

374.                    cout <<该图书不存在<< endl;  

375.                    break;  

376.                }  

377.                b->delbook();  

378.                break;  

379.            case '4':  

380.                cout << "  读入图书编号:"<;  

381.                cin >> bookid;  

382.                b=query(bookid);  

383.                if (b==NULL)  

384.                {  

385.                    cout <<"  该图书不存在"<< endl;  

386.                    break;  

387.                }  

388.                b->disp();  

389.                break;  

390.            case '5':  

391.                disp();  

392.                break;  

393.            case '6':  

394.                clear();  

395.                break;  

396.            default:  

397.                cout<<"输入错误,请从新输入:";  

398.            }  

399.        }  

400.    }  

401.      

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

403.      

404.    int main(void)  

405.    {  

406.        char choice;  

407.        int bookid,readerid;  

408.        RDatabase ReaderDB;  

409.        Reader *r;  

410.        BDatabase BookDB;  

411.        Book *b;  

412.        while(choice!='0')  

413.        {  

414.            cout <"\t\t\t               \n\n\n";//构造函数:作用是初始化的操作  

415.            cout <<"\t\t\t1           \n\n\t\t\t2            \n\n\t\t\t3       \n\n\t\t\t4       \n\n\t\t\t0           "<;  

416.            cin >> choice;  

417.            switch (choice)  

418.            {  

419.            case '1':  

420.                cout <<"  借书 读者编号:";  

421.                cin >>readerid;  

422.                cout <<"  图书编号: ";  

423.                cin >>bookid;  

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

425.                if (NULL==r)  

426.                {  

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

428.                    break;  

429.                }  

430.                b=BookDB.query(bookid);  

431.                if (b==NULL)  

432.                {  

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

434.                    break;  

435.                }  

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

437.                {  

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

439.                    break;  

440.                }  

441.                r->borrowbook(b->getno());  

442.                break;  

443.            case '2':  

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

445.                cin >>readerid;  

446.                cout << "   图书编号:";  

447.                cin >>bookid;  

448.                r=ReaderDB.query(readerid);  

449.                if (r==NULL)  

450.                {  

451.                    cout <<不存在该读者,不能还书<< endl;  

452.                    break;  

453.                }  

454.                b=BookDB.query(bookid);  

455.                if (b==NULL)  

456.                {  

457.                    cout <<"  不存在该图书,不能还书<;  

458.                    break;  

459.                }  

460.                b->retbook();  

461.                r->retbook(b->getno());  

462.                break;  

463.            case '3':  

464.                BookDB.bookdata();  

465.                break;  

466.            case '4':  

467.                ReaderDB.readerdata();  

468.                break;  

469.            default:  

470.                cout<<"输入错误,请从新输入:";  

471.      

472.            }  

473.        }  

474.        return 0;  

475.    }  

 

你可能感兴趣的:(c++,图书馆管理系统)