JavaWeb用MV模式C实现简单的图书管理系统报告资料(最终定稿)

时间:2019-05-14 01:19:26下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《JavaWeb用MV模式C实现简单的图书管理系统报告资料》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《JavaWeb用MV模式C实现简单的图书管理系统报告资料》。

第一篇:JavaWeb用MV模式C实现简单的图书管理系统报告资料

《软件开发基础(Java)》

综合性实验报告

目:

MVC实验 图书管理系统 班

级:

学生学号:

学生姓名:

指导老师:

提交时间:

2016年1月14日

数学与信息学院

一、实验目的

掌握基于MVC的三层架构。

二、实验题目

通过数据源和DAO对象访问数据库。其中JavaBeans实现模型,访问数据库,Servlet实现控制器,JSP页面实现视图。

模型包括2个JavaBean:BookBean用于存放图书信息,BookDAO用于访问数据库。 控制器包括2个Servlet:BookQueryServlet根据请求参数查询图书信息、BookInsertServlet用来向数据库中插入数据。 视图包括4个JSP页面:bookQuery.jsp显示查询页面、bookInsert.jsp显示插入页面、display.jsp显示查询结果页面和errorPage.jsp显示错误页面。

三、具体实现

1.设计数据库

CREATE TABLE books(bookid varchar(20)PRIMARY KEY, title varchar(50)author varchar(30), publisher varchar(40), price Float);

2.程序流程 查询图书信息

插入图书信息

3.代码实现

(1)存放图书信息的JavaBeans代码BookBean.java package com.beans;import java.io.*;

public class BookBean implements Serializable{

private String bookid = null;//图书编号

private String title = null;// 图书书名

private String author = null;// 图书作者

private String publisher = null;// 图书出版社

private float price = 0.0F;// 图书价格

public BookBean(){}

public BookBean(String bookId, String author,String title, String publisher, float price){

this.bookid = bookId;

this.title = title;

this.author = author;

this.publisher = publisher;this.price = price;

}

public String getBookid(){ return this.bookid;}

public String getTitle(){ return title;}

public String getAuthor(){ return this.author;}

public float getPrice(){ return price;}

public String getPublisher(){ return publisher;}

public void setBookid(String bookid){ this.bookid=bookid;}

public void setTitle(String title){this.title=title;}

public void setAuthor(String author){ this.author = author;}

public void setPrice(float price){this.price=price;}

public void setPublisher(String publisher){ this.publisher = publisher;} }

(2)BookDAO是一个简单的JavaBeans,它实现数据库的访问 package com.beans;import java.sql.*;

import javax.sql.*;import javax.naming.*;import java.util.ArrayList;

public class BookDAO{

private static Context context= null;

private DataSource dataSource = null;

public BookDAO(){

try{

if(context == null){

context = new InitialContext();

context =(Context)context.lookup(“java:comp/env”);

// 连接的是在context.xml下面配置的数据库连接池

dataSource =(DataSource)context.lookup(“databasePool”);

}

}catch(NamingException e2){

}

}

// 根据书号查询图书信息

public BookBean searchBook(String bookid){

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rst = null;

BookBean book = new BookBean();

try{

conn = dataSource.getConnection();

pstmt = conn.prepareStatement(“SELECT * FROM books WHERE bookid=?”);

pstmt.setString(1,bookid);

rst = pstmt.executeQuery();

if(rst.next()){

book.setBookid(rst.getString(“bookid”));

book.setTitle(rst.getString(“title”));

book.setAuthor(rst.getString(“author”));

book.setPublisher(rst.getString(“publisher”));

book.setPrice(rst.getFloat(“price”));

return book;

}else{

return null;

}

}catch(SQLException se){

return null;

}finally{

try{

conn.close();

}catch(SQLException se){

}

}

}

// 插入一本图书记录

public boolean insertBook(BookBean book){

Connection conn = null;

PreparedStatement pstmt = null;

try{

conn = dataSource.getConnection();

pstmt = conn.prepareStatement(“INSERT INTO books VALUES(?,?,?,?,?)”);

pstmt.setString(1,book.getBookid());

pstmt.setString(2,book.getTitle());

pstmt.setString(3,book.getAuthor());

pstmt.setString(4,book.getPublisher());

pstmt.setFloat(5,book.getPrice());

pstmt.executeUpdate();

pstmt.close();

return true;

}catch(SQLException se){

return false;

}finally{

try{

conn.close();

}catch(SQLException se){ }

}

}

}

(3)JSP页面bookQuery.jsp实现根据书号查询图书信息 <%@ page contentType=“text/html;charset=UTF-8” %> Book Query 请输入一个书号:


第二篇:c语言图书管理系统

C语言——图书管理系统

代码部分: #include #include #include #pragma comment(lib,“libmysql.lib”)

/*定义数据库相关操作变量*/ MYSQL mysql;

// MYSQL_RES *result;

//定义结果集变量 MYSQL_ROW row;

//定义行变量 char ch[2];

void ShowAll();

/*显示所有的图书信息*/ void AddBook();

/*添加图书信息*/ void ModifyBook();

/*修改图书信息*/ void DeleteBook();

/*删除图书信息*/ void QueryBook();

/*查询图书信息*/

/*显示菜单*/ void showmenu(){

system(“cls”);

printf(“nnnnn”);

printf(“t╔═══════════════════════════╗n”);

printf(“t║

Welcome To Lemon Books System

║n”);

printf(“t╠═══════════════════════════╣n”);

printf(“t║t 1添加图书信息

║n”);

printf(“t║t 3删除图书信息

║n”);

printf(“t║t 5退出

║n”);

printf(“t╚═══════════════════════════╝n”);

printf(“n

ENTER YOUR CHOICE(1-6):”);

}

void inquire()/*询问用户是否显示主菜单*/ {

printf(“t 显示主菜单?(y/n):”);

scanf(“%s”,ch);

if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)/*判断是否要显示查找到的信息*/

{

showmenu();

/*显示菜单*/

}

else

{

exit(0);

} }

/*显示主菜单,连接数据库*/ int main(){

int n;

//定义变量

存储用户输入的编号

mysql_init(&mysql);//初始化mysql结构

showmenu();

/*显示菜单*/

scanf(“%d”,&n);/*输入选择功能的编号*/

while(n)

{

switch(n)

{

case 1:

ShowAll();

/*调用显示所有图书数据的过程*/

break;

case 2:

AddBook();

/*添加图书信息*/

break;

case 3:

ModifyBook();

/*修改图书信息*/

break;

case 4:

DeleteBook();

/*删除图书信息*/

break;

case 5:

QueryBook();

/*查询图书信息*/

break;

case 6:

exit(0);

/*退出*/

default:break;

}

scanf(“%d”,&n);

} }

void ShowAll()

/*调用显示所有图书数据的过程*/ {

/*连接数据库*/

if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0))

{

printf(“nt 不能连接数据库!n”);

}

else

{

/*数据库连接成功*/

if(mysql_query(&mysql,“select * from tb_book”))

{

//如果查询失败

printf(“nt 查询 tb_book 数据表失败!n”);

}

else

{

result=mysql_store_result(&mysql);//获得结果集

if(mysql_num_rows(result)!=NULL)

{ //有记录的情况,只有有记录取数据才有意义

printf(“t ════════════════════════════

n”);

printf(“t

显 示 所 有 图 书 信 息

n”);

printf(“t ════════════════════════════ n”);

printf(“t图书编号

图书名

作者

出版社

n”);

printf(“t-------------------------n”);

while((row=mysql_fetch_row(result)))

{

//取出结果集中记录

fprintf(stdout,“t

%s

%s

%s

%s

n”,row[0],row[1],row[2],row[3]);//输出这行记录

}

printf(“t ════════════════════════════ n”);

}

else

{

printf(“nt 没有记录信息!n”);

}

mysql_free_result(result);

//释放结果集

}

mysql_close(&mysql);

//释放连接

}

inquire();

/*询问是否显示主菜单*/ }

void AddBook()

/*添加图书信息*/ {

int rowcount;

/*结果集中的行数*/

char id[10];

/*编号*/

char *bookname;

char *author;

char *bookconcern;

char *sql;

char dest[500] ={“

”};

/*连接数据库*/

if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0))

{

printf(“nt 不能连接数据库!n”);

}

else

{

/*数据库连接成功,插入数据*/

printf(“t ════════════════════════════ n”);

printf(“t

添 加 图 书 信 息

n”);

printf(“t ════════════════════════════ n”);

if(mysql_query(&mysql,“select * from tb_book”))

{

//如果查询失败

printf(“nt 查询 tb_book 数据表失败!n”);

}

else

{

result=mysql_store_result(&mysql);//获得结果集

rowcount=mysql_num_rows(result);//获得行数

row=mysql_fetch_row(result);

//获取结果集的行

printf(“t 图书编号:”);

scanf(“%s”,id);

/*输入图书编号*/

sql=“insert into tb_book(ID,bookname,author,bookconcern)values(”;

strcat(dest,sql);

strcat(dest,“'”);

strcat(dest,id);

strcat(dest,“', '”);

if(mysql_num_rows(result)!=NULL)

{

/*判断输入的编号是否存在*/

do

{

//存在相同编号

if(!strcmp(id,row[0]))

{

// printf(“%s”,row[0]);

printf(“nt 记录存在,按任意键继续!n”);

getch();

mysql_free_result(result);

/*释放结果集*/ mysql_close(&mysql);

/*释放连接*/

inquire();

/*询问是否显示主菜单*/

return;

}

}while(row=mysql_fetch_row(result));

}

bookname =(char*)malloc(50);

author =(char*)malloc(50);

bookconcern =(char*)malloc(50);

//不存在相同的编号

printf(“t 图书名:”);

scanf(“%s”,bookname);

/*输入图书名*/

strcat(dest,bookname);

/*将图书编号追加到sql语句后面*/

printf(“t 作者:”);

scanf(“%s”,author);

/*输入作者*/

strcat(dest,“', '”);

strcat(dest,author);

printf(“t 出版社:”);

scanf(“%s”,bookconcern);

/*输入出版社*/

strcat(dest,“', '”);

strcat(dest,bookconcern);

strcat(dest,“')”);

//printf(“%s”,dest);

if(mysql_query(&mysql,dest)!=0)

{

fprintf(stderr,“t 不能插入记录!”,mysql_error(&mysql));

}

else

{

printf(“t 插入成功!n”);

}

mysql_free_result(result);

//释放结果集

}

mysql_close(&mysql);

//释放连接

}

inquire();

/*询问是否显示主菜单*/ }

void ModifyBook()

/*修改图书信息*/ {

char id[10];

/*结果集中的行数*/

char *sql;

char dest[500] ={“

”};

char dest1[500] ={“

”};

char *bookname;

char *author;

char *bookconcern;

if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0))

{

printf(“t 不能连接数据库!n”);

}

else

{

/*数据库连接成功*/

// printf(“连接成功”);

printf(“t 请输入您想要修改的图书编号.”);

scanf(“%s”,id);

/*输入图书编号*/

sql = “select * from tb_book where id=”;

strcat(dest,sql);

strcat(dest,id);

/*将图书编号追加到sql语句后面*/

//printf(“%sn”,dest);

/*查询该图书信息是否存在*/

if(mysql_query(&mysql,dest))

{

//如果查询失败

printf(“n 查询 tb_book 数据表失败!n”);

}

else

{

result=mysql_store_result(&mysql);//获得结果集

if(mysql_num_rows(result)!=NULL)

{

//有记录的情况,只有有记录取数据才有意义

printf(“t 发现记录信息,是否显示?(y/n)”);

scanf(“%s”,ch);

if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)/*判断是否要显示查找到的信息*/

{

printf(“t ════════════════════════════

n”);

printf(“t

***** 显示图书信息 *****

n”);

printf(“t ════════════════════════════ n”);

printf(“t图书编号

图书名

作者

出版社

n”);

printf(“t-------------------------n”);

while((row=mysql_fetch_row(result)))

{

//取出结果集中记录

fprintf(stdout,“t

%s

%s

%s

%s

n”,row[0],row[1],row[2],row[3]);//输出这行记录

}

printf(“t ════════════════════════════ n”);

}

printf(“t Modify?(y/n)”);

scanf(“%s”,ch);

if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)

/*判断是否需要录入*/

{

sql = “update tb_book set bookname= '”;

strcat(dest1,sql);

//

printf(“%s”,sql);

bookname =(char*)malloc(20);

author =(char*)malloc(20);

bookconcern =(char*)malloc(20);

printf(“t 图书名:”);

scanf(“%s”,bookname);

/*输入图书名*/

strcat(dest1,bookname);

// printf(“%s”,&bookname);

printf(“t 作者:”);

scanf(“%s”,author);

/*输入作者*/

strcat(dest1,“', author= '”);

strcat(dest1,author);

/*追加sql语句*/

printf(“t 出版社:”);

scanf(“%s”,bookconcern);

/*输入出版社*/

strcat(dest1,“', bookconcern = '”);

strcat(dest1,bookconcern);

/*追加sql语句*/

strcat(dest1,“' where id= ”);

strcat(dest1,id);

//printf(“%s”,dest1);

if(mysql_query(&mysql,dest1)!=0)

{

fprintf(stderr,“t 不能修改记录!n”,mysql_error(&mysql));

}

else

{

printf(“t 修改成功!n”);

}

}

}

else

{

printf(“t 没有发现要修改的信息!n”);

}

}

mysql_free_result(result);

//释放结果集

}

mysql_close(&mysql);

//释放连接

inquire();

/*询问是否显示主菜单*/ }

void DeleteBook()

/*删除图书信息*/ {

char id[10];

/*结果集中的行数*/

char *sql;

char dest[100] ={“

”};

char dest1[100] ={“

”};

if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0))

{

printf(“t 不能连接数据库!n”);

}

else

{

printf(“t 请输入您想要删除的图书编号.”);

scanf(“%s”,id);

/*输入图书编号*/

sql = “select * from tb_book where id=”;

strcat(dest,sql);

strcat(dest,id);

/*将图书编号追加到sql语句后面*/

//printf(“%sn”,dest);

/*查询该图书信息是否存在*/

if(mysql_query(&mysql,dest))

{

//如果查询失败

printf(“n 查询 tb_book 数据表失败!n”);

}

else

{

result=mysql_store_result(&mysql);//获得结果集

if(mysql_num_rows(result)!=NULL)

{ //有记录的情况,只有有记录取数据才有意义

printf(“t 发现记录信息,是否显示?(y/n)”);

scanf(“%s”,ch);

if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)/*判断是否要显示查找到的信息*/

{

printf(“t ════════════════════════════

n”);

printf(“t

***** 显示图书信息 *****

n”);

printf(“t ════════════════════════════ n”);

printf(“t图书编号

图书名

作者

出版社

n”);

printf(“t-------------------------n”);

while((row=mysql_fetch_row(result)))

{

//取出结果集中记录

fprintf(stdout,“t

%s

%s

%s

%s

n”,row[0],row[1],row[2],row[3]);//输出这行记录

}

printf(“t ════════════════════════════ n”);

}

printf(“t 是否删除?(y/n)”);

scanf(“%s”,ch);

if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)

/*判断是否需要录入*/

{

sql = “delete from tb_book where ID= ”;

printf(“%s”,dest1);

strcat(dest1,sql);

strcat(dest1,id);

// printf(“%s”,dest1);

if(mysql_query(&mysql,dest1)!=0)

{

fprintf(stderr,“t 不能删除记录!n”,mysql_error(&mysql));

}

else

{

printf(“t 删除成功!n”);

}

}

}

else

{

printf(“t 没有发现要删除的信息!n”);

}

}

mysql_free_result(result);

//释放结果集

}

mysql_close(&mysql);

inquire();

/*询问是否显示主菜单*/ }

void QueryBook()

/*查询图书信息*/ {

char id[10];

/*结果集中的行数*/

char *sql;

char dest[100] ={“

”};

if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0))

{

printf(“t 不能连接数据库!n”);

}

else

{

printf(“t 请输入您想要查询的图书编号:”);

scanf(“%s”,id);

/*输入图书编号*/

sql = “select * from tb_book where id=”;

strcat(dest,sql);

strcat(dest,id);

/*将图书编号追加到sql语句后面*/

if(mysql_query(&mysql,dest))

{

//如果查询失败

printf(“n 查询 tb_book 数据表失败!n”);

}

else

{

result=mysql_store_result(&mysql);//获得结果集

if(mysql_num_rows(result)!=NULL)

{ //有记录的情况,只有有记录取数据才有意义

printf(“t ════════════════════════════

n”);

printf(“t

显示图书信息

n”);

printf(“t ════════════════════════════ n”);

printf(“t图书编号

图书名

作者

出版社

n”);

printf(“t-------------------------n”);

while((row=mysql_fetch_row(result)))

{

//取出结果集中记录

fprintf(stdout,“t

%s

%s

%s

%s

n”,row[0],row[1],row[2],row[3]);//输出这行记录

}

printf(“t ════════════════════════════ n”);

}

else

{

printf(“t 没有发现要查询的信息!n”);

}

mysql_free_result(result);

//释放结果集

}

mysql_close(&mysql);

//释放连接

}

inquire();

/*询问是否显示主菜单*/ }

说明部分

附加MySQL数据库

将工程文件夹中的data文件夹下的db_books文件夹拷贝到本地Mysql数据库安装文件夹的data文件夹中。即可完成对数据库的附加。

连接MySql的步骤

MySQL为C语言提供了连接数据库的API,要想正常使用这些API,需要做以下两件事情:(1)包含这些API的声明文件,即mysql.h。

(2)让编译器找到这些API的可执行程序,即DLL库。下面介绍一下详细的步骤: 1.

下面解决,让编译器找到mysql.h的问题。需要在编译环境中作如下的设置: 在Visual C++ 6.0中,选择Tools(工具)/Options(选项)菜单项,如下图所示。

选择菜单命令

即可打开Options对话框,在Options对话框中选择Directories选项卡,在Show directories for下拉列表框中选择Include files选项,在Directiories列表框中添加本地安装MySQL的include目录路径。如下图所示。默认的路径应该在C:Program FilesMySQLMySQL Server 5.0include。

添加mysql.h文件

通过上述设置,编译器就可以知道MySQL的API接口中有哪些函数,以及函数的原型是怎样的。在编译时,所编写的程序已经能够通过编译(compile)这步了。

2.引入库函数

经过上一步的设置,程序已经可以编译通过了,但是编译通过并不等于可以生成可执行文件。还需要告诉编译器这些API函数的可执行文件在哪个DLL文件(libmysql.dll)中。

在工程中选择Tools/Options菜单命令,将弹出Options对话框,在该对话框中选择Directories选项卡,在Show directories for下拉列表框中选择Include files选项。添加本地安装的MySQL的Lib目录路径。默认的安装路径是C:Program FilesMySQLMySQL Server 5.0libdebug 或者C:Program

FilesMySQLMySQL Server 5.0libopt)。设置完成的效果如下图所示。

引用库

单击OK按钮,关闭Options对话框。选择Project/Settings菜单命令。如下图所示。

选择Project/Settings菜单项

下面添加libmysql.lib到工程中。选择Project/Settings菜单项,将弹出Project Settings对话框,在该对话框中选择Link选项卡。在Object/library modules文本框末尾添加libmysql.lib。如下图所示。

添加libmysql.lib到工程中

最好将libmysql.lib以及libmysql.dll文件拷贝到工程的目录下。设置完成后就可以运行程序了程序运行界面如下图所示:

第三篇:用mysql数据库实现的C++图书管理系统

#include #include #include #include #include

#include #include #include #include

#include //改变字体颜色

#define NONE “33[m” #define RED “33[0;32;31m” #define GREEN “33[0;32;32m” #define BLUE “33[0;32;34m” #define YELLOW “33[1;33m”

#define LIGHT_RED “33[1;31m” #define LIGHT_GREEN “33[1;32m” #define LIGHT_BLUE “33[1;34m” /* 在编译程序之前,请先开启mysql服务器(命令为 sudo mysqld_safe &),然后再登录mysql客户端(命令为 mysql-u root-p)建立数据库 stu;建立数据表reader,book;具体操作语句如下:

create database stu;

create table reader(stu_name varchar(20),stu_phone varchar(15),stu_password varchar(10),stu_num int,debt float,lend_time double,back_time double,count int);

create table book(book_name varchar(40),book_aut varchar(40),book_pre varchar(40),book_num int,book_mux int,book_con int);

编译时用如下命令:

g++ $(mysql_config--cflags)110.cpp-o t $(mysql_config--libs)*/

//定义mysql数据库变量

MYSQL

mysql;MYSQL_RES * results;

MYSQL_FIELD *fileds;

MYSQL_ROW rows;

char strHost[] = “localhost”;

char strUser[] = “root”;

char strPasswd[] = “3335599”;

char strDb[] = “stu”;char strSQL[200];

unsigned int num_fields;/* 程序导读:

1.程序中对书的操作,可通过书名,编号来进行,flag=0按书名来操作,flag=1按书编号来操作

2.程序中对用户的操作,也可通过姓名,用户ID号或编号两种方式来进行,flag=0按姓名来操作,flag=1按用户ID号或编号来操作

3.本程序分5个部分,具体已标识如(1)图书管理...4.本程序即可实现将数据保存至本地即stu.txt,book.txt,又可将数据保存至mysql数据库,只

需稍加修改,具体如何修改,在此就不做说明 */

using namespace std;class Book { public: string book_name;string book_num;//编号

string book_pre;//出版社

string book_aut;//作者

int book_con;//这样的书还有几本

int book_mux;//这样的书总共有几本

public: Book(){book_con=0;book_mux=0;} void show_book();

};

/****************************************(1)图书管理*******************************************/ void Book::show_book(){ cout<<“书名:”<

class BookNode { public: Book book;BookNode *next;};BookNode *headbook=NULL;

void savebook(BookNode *p);//保存图书信息到数据库

void del_sql_book(BookNode *p);//将图书信息从数据库中删除

class BookManage {

public: int totolbook;public: BookManage(){totolbook=0;} void addbook();

void delbook(string s,int num,int flag);void findbook(string s,int flag);//查询图书 };

void BookManage::addbook(){ string h;

cout<<“添加输入0,退出输入-1”<>h;if(h==“-1”)return;else if(h==“0”)while(1){

if(h==“-1”)break;else if(h==“0”){

string na,nu,p1,aut;int con;BookNode *p=new BookNode;cout<<“请输入书名:”<>na;p->book.book_name=na;cout<<“请输入ISBN编号:”<>nu;p->book.book_num=nu;cout<<“请输入出版社:”<>p1;p->book.book_pre=p1;cout<<“请输入此书的作者:”<>aut;p->book.book_aut=aut;cout<<“请输入此书共有几本:”<>con;p->book.book_con=con;p->book.book_mux=con;p->next=headbook;headbook=p;savebook(p);//添加至数据库 BookManage::totolbook+=con;

cout<<“继续添加输入0,取消添加输入-1”<

cin>>h;

}

else

cout<

void BookManage::delbook(string s,int num,int flag){ BookNode *p=headbook;if(headbook!=NULL){

switch(flag)

{

case 0:

if(headbook->book.book_name==s)

{

if(headbook->book.book_con>1)

{headbook->book.book_con-=num;headbook->book.book_mux-=num;}

else { headbook=p->next;totolbook-=num;

del_sql_book(p);//从数据库中删除

//delete p;

}

}

else if(p->next)

{

for(p=headbook;p->next!=NULL&&p!=NULL;p=p->next)

{

if(p->next->book.book_name==s)

{

if(p->next->book.book_con>1)

{

p->next->book.book_con-=num;headbook->book.book_mux-=num;

break;

}

else

{

p->next=p->next->next;

totolbook-=num;

del_sql_book(p->next);//从数据库中删除

//delete p->next;

break;

}

}

}

if(p->next==NULL)

cout<

break;case 1:

if(headbook->book.book_num==s){

if(headbook->book.book_con>1)

{headbook->book.book_con-=num;headbook->book.book_mux-=num;}

else

{

headbook=p->next;

totolbook-=num;

del_sql_book(p);//从数据库中删除

//delete p;

}

}

else if(p->next)

{

for(p=headbook;p->next!=NULL&&p!=NULL;p=p->next)

{

if(p->next->book.book_num==s)

{

if(p->next->book.book_con>1)

{

p->next->book.book_con-=num;headbook->book.book_mux-=num;

break;

}

else

{

p->next=p->next->next;

totolbook-=num;

del_sql_book(p->next);//从数据库中删除

//delete p->next;

break;

}

}

}

if(p->next==NULL)

cout<

}

break;

default:

cout<

} } }

void BookManage::findbook(string s,int flag){ BookNode *p;int h=0;switch(flag){

case 0:

for(p=headbook;p!=NULL;p=p->next)//先查看是否有此书

{

if(p->book.book_name==s)break;} if(NULL==p)cout<next)//查看名为s的图书共有几本 { if(p->book.book_name==s)h++;} if(h>0)cout<next)//查看图书,把所有名为s的图书的信息都{

if(p->book.book_name==s){ p->book.show_book();//显示出图书的基本信息

if(p->book.book_con==0)

打印出来

}

cout<

cout<

} } break;case 1: for(p=headbook;p!=NULL;p=p->next){

if(p->book.book_num==s)

{

p->book.show_book();

if(p->book.book_con==0)

cout<

} } if(NULL==p)cout<

/****************************************(*******************************************/

class Admin//管理员 { public: string adm_name;//帐号

string adm_passw;//密码

public: Admin(){

adm_name=“adm”;

adm_passw=“123”;} };

class LendBook { public: string bookname[3];int count;//借多少本数

time_t lend_time;time_t back_time;LendBook(){count=0;} };

class Stu { public: string stu_name;

};

2)用户管理

string stu_phone;//联系方式

string stu_num;//学号(登录帐号)string password;//密码 float debt;//欠费额

LendBook lendbook;//用户借书信息

public: void show_stu();//把此人所有信息(包括借书)显示出来

void Stu::show_stu(){ cout<<“姓名:”<

class StuNode { public: Stu stu;StuNode *next;};StuNode *headstu=NULL;

void savestu(StuNode *p);//保存读者信息到数据库

void del_sql_stu(StuNode *p);//将读者信息从数据库中删除

class StuManage:public BookManage { private: int totolstu;//用户总数

public: StuManage(){totolstu=0;} void addstu();//增加用户

void delstu(string s,int flag);//删除用户

void findstu(string s,int flag);//查找用户

void lendbook(string ss,string s,int flag);//借书

void backbook(string ss,string s,int flag);//还书

void paydebt(string s);//还款

void mux_stu_book();//查询图书管总的图书量与总的用户量 };

void StuManage::addstu(){ string h;

cout<<“添加输入0,退出输入-1”<>h;if(h==“-1”)return;else if(h==“0”)while(1){

if(h==“-1”)break;else if(h==“0”){

string na,num,p1,pa,pa1,pa2;

StuNode *p=new StuNode;

cout<<“请输入姓名:”<

cin>>na;

p->stu.stu_name=na;

cout<<“请输入联系电话:”<>p1;p->stu.stu_phone=p1;cout<<“请输入ID:”<>num;p->stu.stu_num=num;p->stu.lendbook.lend_time=0;p->stu.lendbook.back_time=0;while(1){

cout<<“请输入六位密码:”<>pa1;cout<<“请确认六位密码:”<>pa2;if(pa1==pa2){ pa=pa2;p->stu.password=pa;break;} else cout<stu.debt=0;p->next=headstu;headstu=p;savestu(p);//保存至数据库

(StuManage::totolstu)++;//用户总数加一

cout<<“继续添加输入0,取消添加输入-1”<>h;

} else cout<

void StuManage::delstu(string s,int flag){ StuNode *p=headstu;if(headstu!=NULL){

switch(flag)

{

case 0:

if(headstu->stu.stu_name==s)//当要删除的用户位于链表的头结点位置 { headstu=p->next;StuManage::totolstu--;del_sql_stu(p);//从数据库中删除

delete p;}

else if(p->next)//非头结点位置 {

for(p=headstu;p->next!=NULL&&p!=NULL;p=p->next){

if(p->next->stu.stu_name==s)

{

p->next=p->next->next;

totolstu--;

del_sql_stu(p->next);//从数据库中删除

//delete p->next;

break;

}

}

if(p->next==NULL)

cout<

break;case 1:

if(headstu->stu.stu_name==s){

headstu=p->next;totolstu--;del_sql_stu(p);//从数据库中删除

delete p;}

else if(p->next){

for(p=headstu;p->next!=NULL&&p!=NULL;p=p->next){

if(p->next->stu.stu_name==s)

{

p->next=p->next->next;

totolstu--;

del_sql_stu(p->next);//从数据库中删除

//delete p->next;

break;

}

}

if(p->next==NULL)

cout<

}

break;

default:

cout<

} } }

void StuManage::findstu(string s,int flag){ StuNode *p;int h=0,m=1;switch(flag){

case 0:

for(p=headstu;p!=NULL;p=p->next)

{

if(p->stu.stu_name==s)

break;

}

if(p==NULL)

cout<

for(p=headstu;p!=NULL;p=p->next)

{

if(p->stu.stu_name==s)h++;} if(h>0)cout<next){ if(p->stu.stu_name==s){

p->stu.show_stu();

if(p->stu.lendbook.count>=3)

{

cout<stu.lendbook.count;if(i>0)

”NONE<

cout<<“所借书的名字为:”<

while(i)

{

cout<<“t(”<stu.lendbook.bookname[i-1]<

}

cout<

}

else

{

int i=p->stu.lendbook.count;

if(i>0)

cout<<“所借书的名字为:”<

while(i)

{

cout<<“t(”<stu.lendbook.bookname[i-1]<

}

} } break;case 1:

}

cout<<“您已借了”<

stu.lendbook.count<<“本书!”<stu.lendbook.count<<“本书!”<

for(p=headstu;p!=NULL;p=p->next)

{

if(p->stu.stu_num==s)

{

p->stu.show_stu();

if(p->stu.lendbook.count>=3)

{

cout<

int i=p->stu.lendbook.count;

cout<<“所借书的名字为:”<

//输出用户所借书的名字 cout<<“t(”<stu.lendbook.bookname[i-1]<

}

cout<

}

else

{

int i=p->stu.lendbook.count;

cout<<“所借书的名字为:”<

while(i)

{ //输出用户所借书的名字

cout<<“t(”<stu.lendbook.bookname[i-1]<

}

cout<<“您已借了”<

stu.lendbook.count<<“本书!”<

cout<<“您还可以借”<<3-p->stu.lendbook.count<<“本书!”NONE<

cout<

}

break;

}

}

if(p==NULL)

cout<

break;

default:

cout<

}

void StuManage::mux_stu_book(){ StuNode *p;BookNode *q;int i=0,j=0,h=0;for(p=headstu;p!=NULL;p=p->next)i++;cout<<“当前图书馆注册用户数为:”<next){

h+=q->book.book_mux;

j+=q->book.book_con;}

} cout<<“当前图书馆库存的总书记数为:”<next){

if(q->stu.stu_num==ss)

{del_sql_stu(q);break;}//丛数据库中删除

} if(q==NULL){cout<

switch(flag){

case 0:

for(p=headbook;p!=NULL;p=p->next)

{

if(p->book.book_name==s)

{

“NONE<

del_sql_book(p);//从数据库中删除 int i=q->stu.lendbook.count;if(i>=3||q->stu.debt>0){ if((i>=3)&&(q->stu.debt==0)){cout<

if((i<3)&&(q->stu.debt>0))

{cout<

if((i>=3)&&(q->stu.debt>0))

{cout<

}

else

{

//记录下所借书的名字存入用户信息中

q->stu.lendbook.bookname[i]=p->book.book_name;

time_t now;

time(&now);

q->stu.lendbook.lend_time=time(&now);//保存借书时间

q->stu.lendbook.count++;//所借书数目加一

p->book.book_con--;//同样的书的个数减一

}

break;

}

}

if(p==NULL)

cout<

break;

case 1:

for(p=headbook;p!=NULL;p=p->next)

{

if(p->book.book_num==s)

{

del_sql_book(p);//从数据库中删除

int i=q->stu.lendbook.count;

if(i>=3||q->stu.debt>0)

{

if((i>=3)&&(q->stu.debt==0))

{cout<

if((i<3)&&(q->stu.debt>0))

{cout<

if((i>=3)&&(q->stu.debt>0))

{cout<

}

else

{

}

q->stu.lendbook.bookname[i]=p->book.book_name;

time_t now;

time(&now);

q->stu.lendbook.lend_time=time(&now);

q->stu.lendbook.count++;

p->book.book_con--;//同样的书的个数减一

}

break;

} } if(p==NULL)

cout<

break;default:

cout<

void StuManage::backbook(string ss,string s,int flag)//还书 { BookNode *p;StuNode *q;for(q=headstu;q!=NULL;q=q->next){

if(q->stu.stu_num==ss)

{del_sql_stu(q);break;}//丛数据库中删除

} if(q==NULL){cout<

switch(flag){

case 0:

for(p=headbook;p!=NULL;p=p->next)

{

if(p->book.book_name==s)

{

del_sql_book(p);//从数据库中删除

time_t now;

time(&now);

q->stu.lendbook.back_time=time(&now);

q->stu.lendbook.count--;

p->book.book_con++;//同样的书的个数加一

time_t s=difftime(q->stu.lendbook.lend_time,q->stu.lendbook.back_time);

if(s>2592000)//2592000为一个月的秒数

{

int t=ceil((s-2592000)/86400);

q->stu.debt=t*0.1;

}

break;} } if(p==NULL)

cout<

break;

case 1:

for(p=headbook;p!=NULL;p=p->next)

{

if(p->book.book_num==s)

{

del_sql_book(p);//从数据库删除

time_t now;

time(&now);

q->stu.lendbook.back_time=time(&now);

q->stu.lendbook.count--;

p->book.book_con++;//同样的书的个数加一

//计算借用图书的时间,超过一个月,开始计费

time_t s=difftime(q->stu.lendbook.lend_time,q->stu.lendbook.back_time);

}

if(s>2592000)//2592000为一个月的秒数

{

int t=ceil((s-2592000)/86400);

q->stu.debt=t*0.1;

}

break;

} } if(p==NULL)cout<

}

void StuManage::paydebt(string s){ StuNode *p;

for(p=headstu;p!=NULL;p=p->next)//查找用户 { if(p->stu.stu_num==s){

p->stu.debt=0;

cout<

stream << result;//将string输入流

stream >> stu_str;//从i中抽取前面插入的string值

return stu_str;}

void savestu(StuNode *p)//保存读者信息到数据库 {

memset((void*)strSQL,0,200);sprintf(strSQL,“insert into reader values(%s,%s,%s,%s,%f,%ld,%ld,%d)”,change_char(p->stu.stu_name),change_char(p->stu.stu_phone),change_char(p->stu.password),change_char(p->stu.stu_num),p->stu.debt,(long)(p->stu.lendbook.lend_time),(long)(p->stu.lendbook.back_time),p->stu.lendbook.count);if(mysql_real_query(&mysql,strSQL,strlen(strSQL))!= 0)

printf(“记录插入失败!n”);}

void savebook(BookNode *p)//保存图书信息到数据库 { memset((void*)strSQL,0,200);sprintf(strSQL,“insert into book values(%s,%s,%s,%s,%d,%d)”,change_char(p->book.book_name),change_char(p->book.book_aut),change_char(p->book.book_pre),change_char(p->book.book_num),p->book.book_mux,p->book.book_con);if(mysql_real_query(&mysql,strSQL,strlen(strSQL))!= 0)

printf(“记录插入失败!n”);

}

void del_sql_stu(StuNode *p)//将读者信息从数据库中删除 {

memset((void*)strSQL,0,200);sprintf(strSQL,“delete from reader where stu_name='%s'”,change_char(p->stu.stu_name));if(mysql_real_query(&mysql,strSQL,strlen(strSQL))!= 0)

printf(“记录删除失败!n”);}

void del_sql_book(BookNode *p)//将图书信息从数据库中删除 { memset((void*)strSQL,0,200);sprintf(strSQL,“delete from book book_name='%s'”,change_char(p->book.book_name));if(mysql_real_query(&mysql,strSQL,strlen(strSQL))!= 0)

printf(“记录删除失败!n”);

} /* void savestu()//保存读者信息文件 { ofstream outfile(“./stu.txt”,ios::out);

if(!outfile){

cerr<<“open error!”<

return;} StuNode *p;

for(p=headstu;p!=NULL;p=p->next)//数据写入文件

{

outfile<

stu.stu_name<<“ ”<

stu.stu_phone;

outfile<<“ ”<

stu.password<<“ ”<

stu.stu_num;

where

outfile<<“ ”<

stu.debt;

outfile<<“ ”<

stu.lendbook.lend_time;

outfile<<“ ”<

stu.lendbook.back_time;

outfile<<“ ”<

stu.lendbook.count;

outfile<<“ ”<

} outfile.close();}

void savebook()//保存图书信息文件 { ofstream outfile(“./book.txt”,ios::out);

if(!outfile){

cerr<<“open error!”<

return;} BookNode *p;

for(p=headbook;p!=NULL;p=p->next)//数据写入文件

{

outfile<

book.book_name<<“ ”<

book.book_num;

outfile<<“ ”<

book.book_pre<<“ ”<

book.book_aut;

outfile<<“ ”<

book.book_mux;

outfile<<“ ”<

book.book_con;

outfile<<“ ”<

void loadstu()//从学生数据数据库reader中读取 { int i = 0;memset((void*)strSQL,0,100);

strcpy(strSQL,“select * from reader”);

mysql_query(&mysql,strSQL);

//查询

results = mysql_store_result(&mysql);

//获取记录

num_fields = mysql_num_fields(results);

//获取字段数

fileds = mysql_fetch_fields(results);

//获取字段数组

while((rows = mysql_fetch_row(results))!= NULL)

//循环显示

{

while(i < num_fields)

{

StuNode *p=new StuNode;

p->stu.stu_name =(rows[i]?rows[i++]:“NULL”);

p->stu.stu_phone =(rows[i]?rows[i++]:“NULL”);

p->stu.password =(rows[i]?rows[i++]:“NULL”);

p->stu.stu_num =(rows[i]?rows[i++]:“NULL”);

p->stu.debt = atof(rows[i]?rows[i++]:“NULL”);

p->stu.lendbook.lend_time =(time_t)(rows[i]?rows[i++]:“NULL”);

p->stu.lendbook.back_time =(time_t)(rows[i]?rows[i++]:“NULL”);

p->stu.lendbook.count = atoi(rows[i]?rows[i++]:“NULL”);

p->next=headstu;//建立用户链表

headstu=p;

}

i = 0;} }

void loadbook()//从书数据库中读取 { int i = 0;memset((void*)strSQL,0,100);

strcpy(strSQL,“select * from book”);

mysql_query(&mysql,strSQL);

//查询

results = mysql_store_result(&mysql);

//获取记录

num_fields = mysql_num_fields(results);

//获取字段数

fileds = mysql_fetch_fields(results);

//获取字段数组

while((rows = mysql_fetch_row(results))!= NULL)

//循环显示

{

while(i < num_fields)

{

BookNode *p=new BookNode;

p->book.book_name =(rows[i]?rows[i++]:“NULL”);

p->book.book_aut =(rows[i]?rows[i++]:“NULL”);

p->book.book_pre =(rows[i]?rows[i++]:“NULL”);

p->book.book_num =(rows[i]?rows[i++]:“NULL”);

p->book.book_mux = atoi(rows[i]?rows[i++]:“NULL”);

p->book.book_con = atoi(rows[i]?rows[i++]:“NULL”);

p->next=headbook;//建立用户链表

headbook=p;

}

i = 0;} }

/* void loadstu()//从学生数据文件读取 { ifstream infile(“./stu.txt”,ios::in);

if(!infile){

cout<

return;} if(infile.eof()){

cout<

infile.close();} else {

while(infile.peek()!=EOF)//数据从文件读出

{

StuNode *p=new StuNode;

infile>>p->stu.stu_name>>p->stu.stu_phone;

infile>>p->stu.password>>p->stu.stu_num;

infile>>p->stu.debt>>p->stu.lendbook.lend_time;

infile>>p->stu.lendbook.back_time>>p->stu.lendbook.count;

if(p->stu.stu_name!=“")

{

p->next=headstu;//建立用户链表

headstu=p;

}

else

delete p;

}

infile.close();} }

void loadbook()//从书数据文件读取 {

ifstream infile(”./book.txt“,ios::in);

if(!infile){

} cout<

while(infile.peek()!=EOF)//数据从文件读出

{

BookNode *p=new BookNode;infile>>p->book.book_name>>p->book.book_num;infile>>p->book.book_pre>>p->book.book_aut;infile>>p->book.book_mux>>p->book.book_con;

if(p->book.book_name!=”“){ p->next=headbook;//建立图书链表

headbook=p;} else delete p;

} } */ } infile.close();/****************************************(*******************************************/

void MenuAdmin(){

4)界面部分 cout<>>>>>>>>>>>>>>>>>>>>>>>>>>>欢迎来到图书管理系统<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“NONE<

$“NONE<

$“NONE<

$“NONE<

删除书目

$“NONE<

$“NONE<

cout<

借书

$“NONE<

$“NONE<

cout<

还书

$“NONE<

$“NONE<

查询图书

$“NONE<

$“NONE<

$“NONE<

$“NONE<

$“NONE<

$“NONE<

查询用户

$“NONE<

$“NONE<

用户交费

$“NONE<

$“NONE<

$“NONE<

$“NONE<

0 退出

$“NONE<

$“NONE<>>>>>>>>>>>>>>>>>>>>>>>>>[请字)]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“NONE<

void MenuStu(){

(输

数 cout<>>>>>>>>>>>>>>>>>>>>>>>>>>>欢迎来到图书管理系统<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“NONE<

cout<

$“NONE<

cout<

借书

$“NONE<

$“NONE<

cout<

还书

$“NONE<

$“NONE<

查询图书

$“NONE<

$“NONE<

个人信息

$“NONE<

$“NONE<

0 退出

$“NONE<

$“NONE<>>>>>>>>>>>>>>>>>>>>>>>>>[请选择(输入相应数字)]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<“NONE<

int getch()//密码不回显函数1 { int c=0;

struct termios org_opts, new_opts;

int res=0;

//-----store old settings-----------

res=tcgetattr(STDIN_FILENO, &org_opts);

assert(res==0);

//----set new terminal parms--------

memcpy(&new_opts, &org_opts, sizeof(new_opts));

new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);

tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);

c=getchar();

//------restore old settings---------

res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);

assert(res==0);

return c;}

string set_passwd()//密码不回显函数2 { string result;char pd[128];int i;getch();/* 当帐号和密码一起输入,且刚输完帐号后就要输入密码时,set_passwd会把帐号结束时的回车赋‘n’拿过来作为自己的第一个输入,这样容易造成密码输入的错 误,为避免

这种情况的发生,所以就可以在for循环之前假如了getch()把‘n’吸收掉 */

for(i=0;;i++)

{

pd[i]=getch();

if(pd[i]=='n')

{

pd[i]='';

break;

}

if(pd[i]==127)

{

printf(”b b“);

i=i-2;

}

else

printf(”*“);

if(i<0)

pd[0]='';

} stringstream stream;stream << pd;//将char输入流

stream >> result;//从stream中抽取前面插入的char值

return result;}

/****************************************(5)主函数部分*******************************************/

int main(){ mysql_init(&mysql);//数据库初始化

if(!mysql_real_connect(&mysql,strHost,strUser,strPasswd,strDb,0,NULL,0))//连接数据库

{

printf(”连接数据库失败!/n“);

return 0;

} loadstu();loadbook();

mysql_free_result(results);//释放数据库结果集

BookManage bookmanage;StuManage stumanage;

Admin admin;int i;string s;int num,flag;string s1,s2,ss;StuNode *p;system(”clear“);//清理屏幕

cout<

~Welecome to come in~“NONE<>i;

switch(i){

case 0:

break;

case 1:

while(1)

{

cout<<”请输入管理员登录名:“<

cin>>s1;

if(s1==”0“)

return 0;

cout<<”请输入密码:“<

s2=set_passwd();

cout<

if(admin.adm_name==s1)

{

while(1)

{

if(admin.adm_passw==s2)

break;

else

{

cout<

s2=set_passwd();cout<

if(s2==”0“)return 0;

//cin>>s2

}

}

}

if(s1!=admin.adm_name)

cout<

else

break;

}

while(1){ MenuAdmin();int t;cin>>t;switch(t){

”<

“<

case 0: //savestu();savebook();

mysql_close(&mysql);//关闭数据库链接

return 0;break;

case 1:bookmanage.addbook();//增加书本

system(”clear“);break;//清理屏幕

case 2:

cout<<”按书名删除请输入 0 “<

cin>>flag;

if(flag==0)

{cout<<“请输入书名:”;cin>>s;}

else if(flag==1)

{cout<<“请输入书编号:”;cin>>s;}

else

cout<

cout<<“请输入要删除书的数目:”<

cin>>num;

bookmanage.delbook(s,num,flag);//删除书本

system(“clear”);//清理屏幕

break;

case 3:

cout<<“按书名借书请输入 0 ”<

cin>>flag;

if(flag==0)

{cout<<”请输入书名:“;cin>>s;}

else if(flag==1)

{cout<<”请输入书编号:“;cin>>s;}

else

cout<

cout<<”请输入借书人的编号:“<

cin>>ss;

stumanage.lendbook(ss,s,flag);

system(”clear“);//清理屏幕

break;

case 4: cout<<”按书名还书请输入 0 “<

cin>>flag;if(flag==0)

{cout<<”请输入书名:“;cin>>s;} else if(flag==1){cout<<”请输入书编号:“;cin>>s;} else

”<

“<

”<

cout<>ss;stumanage.backbook(ss,s,flag);system(“clear”);//清理屏幕

break;case 5: cout<<“按书名查找请输入 0 ”<>flag;if(flag==0){cout<<”请输入书名:“;cin>>s;} else if(flag==1){cout<<”请输入编号:“;cin>>s;}

else cout<

system(”clear“);//清理屏幕

break;case 7: cout<<”按姓名删除请输入 0 “<>flag;

if(flag==0){cout<<“请输入姓名:”;cin>>s;} else if(flag==1){cout<<“请输入学号:”;cin>>s;} else cout<

system(“clear”);//清理屏幕

break;case 8: cout<<“按姓名查找请输入 0 ”<

cin>>flag;

if(flag==0)

{cout<<”请输入姓名:“;cin>>s;} else if(flag==1)

{cout<<”请输入学号:“;cin>>s;} else cout<

break;case 9:

cout<<”请输入要缴费人的学号!“<>s;

stumanage.paydebt(s);system(”clear“);//清理屏幕

break;case 10: stumanage.mux_stu_book();system(”clear“);//清理屏幕

break;default:

cout<

}

}

break;case 2: while(1){

cout<<”请输入用户登录名[用户编号]:“<

cin>>s1;

if(s1==”0“){return 0;}

cout<<”请输入密码:“<next){ if(p->stu.stu_name==s1){

while(1)

{

if(p->stu.password==s2)

break;

else

0”NONE<

{

if(s2==“0”)return 0;

cout<

”<

“<

s2=set_passwd();

cout<

//cin>>s2

}

}

break;

} } if(p==NULL)cout<

break;}

while(1){ MenuStu();int t;cin>>t;switch(t){

case 0: //savestu();savebook();

mysql_close(&mysql);//关闭数据库链接

return 0;break;

case 1:

cout<<”按书名借书请输入 0 “<

cin>>flag;

if(flag==0)

{cout<<“请输入书名:”;cin>>s;}

else if(flag==1)

{cout<<“请输入书编号:”;cin>>s;}

else

cout<

stumanage.lendbook(s1,s,flag);

system(“clear”);//清理屏幕

break;

case 2: cout<<“按书名还书请输入 0 ”<

cin>>flag;if(flag==0)

{cout<<”请输入书名:“;cin>>s;} else if(flag==1)

{cout<<”请输入书编号:“;cin>>s;} else

cout<

”<

}

system(“clear”);//清理屏幕

break;case 3: cout<<“按书名查找请输入 0 ”<

cin>>flag;if(flag==0)

{cout<<”请输入书名:“;cin>>s;} else if(flag==1)

} {cout<<”请输入编号:“;cin>>s;} else cout<

break;

case 4: stumanage.findstu(s1,1);system(”clear“);//清理屏幕

break;

default: cout<

} break;default: cout<<”输入数字无效!"<

第四篇:C语言程序设计图书管理系统

C语言程序设计

实验报告

题 目: 图书管理管理系统 院 系: 信息科技学院 专 业: 姓 名: 学 号:

指导教师: 杨呈勇 日 期: 09-09-18 问题定义 …………………………………………………………………………..3 2 系统设计 ……………………………………………………………………3 2.1 总体设计………………………………………………………………………………4

2.2 详细设计………………………………………………………………………………4 2.2.1 借书模块 ……… ………………………………………………… 4 2.2.2 图书维护………………………………………………………………………… 5 ① 新增记录 …………………………………………………………………… 5 ② 更改系统…………………………………………….………………… 6 ③删除系统 …………………………………………… 6 ④ 查找系统……………………………………………….………………….6 ⑤ 显示系统 ………………………………………………………………….7 3 系统实现 ………………………………………………………………………10 3.1 编码 ………………………………………………………………………8 3.1.1 程序预处理 ……….……………………………………………………………9 3.1.2 主函数main()……….……………………………………………………….9 4 系统维护 ………………………………………………………………………16 5 归纳总结 ………………………………………………………………………16 5.1 开发经验 ………………………………………………………………………16 5.2 实训中遇到的问题及解决方法 ………………………………………………16 5.3 设计中的不足之处……………………………………………………………………16 5.4 感想和心得体会 ……………………………………………………………………16

图书管理系统

本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。本程序中涉及结构体、单链表、文件及各种语句的运用如for();switch();if….else等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,初步掌握链表的一些结构及构成。掌握利用单链表存储结构实现对学生成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。

1、问题定义

图书信息包括:编号、书名、作者名、分类号、出版单位、出版时间、库存数量,价格等。试设计一图书信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作

(2)图书信息录入功能(图书信息用文件保存)(3)图书信息浏览功能(4)图书信息查询功能

查询方式:可以按书名,按作者名,按出版单位,按出版时间进行查询。(5)图书信息的删除与修改

在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。

2、系统设计 2.1 总体设计

采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,且容易理

解。可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。

图2.1

图书管理系统功能模块图

    本图书管理系统要求采用单链表实现,如图2.1所示,它由如下四大功能模块组成: 借书模块。通过输入读者的编号和图书的编号,查找到要该借的书,完成借书这一项任务

还书模块。通过输入读者的编号和图书的编号,查找到要该还的书,完成还书这一项任务

图书维护模块。完成对图书信息的维护。在此图书管理系统中,它实现了对图书信息的新曾、更改、删除、查找和显示操作,并将追加后的数据存入源数据文件。读者维护模块。一是实现对读者记录的存盘,即将读者信息写入数据文件中;

2.2 详细设计

2.2.1 借书模块

通过输入读者的信息和要借的书的编号。系统显示相应的内容,若该文件中没有数据,系统会提示单链表为空,没有任何读者记录或图书操作,此时,用户应选择调用create()函数,进行读者记录的输入,即完成在单链表1中添加记录的操作。值得一提的是,这里的字符串和数值的输入分别采用了函数来实现,在函数中完成输入数据任务,并对数据进行条件判断,直到满足条件为止,这样一来,大大减少了代码的重复和冗余,符合模块化程序设计的特点。

2.2.2 还书模块

还书模块主要实现了在单链表中按读者和图书的编号查找满足相关条件的借书记录。在

用户选择4,调用查询函数search()中,为指向保存了读者信息的单链表的首地址的指针变量。为了遵循模块化编程的原则,我们将在单链表中进行的指针定位操作,设计一个

int retbook(int bookid)

{

for(int i=0;i

{

if(borbook[i]==bookid)

{

borbook[i]=0;

return 1;

}

}

return 0;

}

//读出读者信息

void disp()

{

cout << setw(5)<< no <

for(int i=0;i

if(borbook[i]!=0)

cout << borbook[i] << “|”;

cout << “]”<

}

};

若没有该记录,则显示无此记录,返回到上一操作。

2.2.3 图书维护模块

此模块主要实现了对图书记录的新增、更改、删除、查找和显示操作。因为图书记录是以单链表的结构形式存储的,所以这些操作都在单链表中完成。下面分别介绍着4个功能模块。

①新增记录。该操作需要对单链表中目标节点的数据域中的值进行追加新增要输入图书的编号和书名,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;

}

⑤显示系统。该操作可以显示出图书现在的信息。cout << “输入图书编号:”<

cin >> bookid;

cout << “输入图书书名:”<

cin >> bname;

addbook(bookid,bname);

break;

case '2':

cout << “输入图书编号:”<

cin >> bookid;

b=query(bookid);

if(b==NULL)

{

cout << “ 该图书不存在 ”<

break;

}

cout << “输入新的书名:”<

cin >> bname;

b->setname(bname);

break;

case '3':

cout <<“ 读入图书编号:”<

cin >> bookid;

b=query(bookid);

if(b==NULL)

{

cout <<“ 该图书不存在” << endl;

break;

}

b->delbook();

break;

case '4':

cout << “ 读入图书编号:”<

cin >> bookid;

b=query(bookid);

if(b==NULL)

{

cout <<“ 该图书不存在”<< endl;

break;

}

b->disp();

break;

case '5':

disp();

break;

case '6':

clear();

break;

default:cout<<“输入错误,请从新输入:”;

}

}

}cout << “输入图书编号:”<

cin >> bookid;

cout << “输入图书书名:”<

cin >> bname;

addbook(bookid,bname);

break;

case '2':

cout << “输入图书编号:”<

cin >> bookid;

b=query(bookid);

if(b==NULL)

{

cout << “ 该图书不存在 ”<

break;

}

cout << “输入新的书名:”<

cin >> bname;

b->setname(bname);

break;

case '3':

cout <<“ 读入图书编号:”<

cin >> bookid;

b=query(bookid);

if(b==NULL)

{

cout <<“ 该图书不存在” << endl;

break;

}

b->delbook();

break;

case '4':

cout << “ 读入图书编号:”<

cin >> bookid;

b=query(bookid);

if(b==NULL)

{

cout <<“ 该图书不存在”<< endl;

break;

}

b->disp();

break;

case '5':

disp();

break;

case '6':

clear();

break;

default:cout<<“输入错误,请从新输入:”;

}

}

} cout << “输入图书编号:”<

cin >> bookid;

cout << “输入图书书名:”<

cin >> bname;

addbook(bookid,bname);

break;

case '2':

cout << “输入图书编号:”<

cin >> bookid;

b=query(bookid);

if(b==NULL)

{

cout << “ 该图书不存在 ”<

break;

}

cout << “输入新的书名:”<

cin >> bname;

b->setname(bname);

break;

case '3':

cout <<“ 读入图书编号:”<

cin >> bookid;

b=query(bookid);

if(b==NULL)

{

cout <<“ 该图书不存在” << endl;

break;

}

b->delbook();

break;

case '4':

cout << “ 读入图书编号:”<

cin >> bookid;

b=query(bookid);

if(b==NULL)

{

cout <<“ 该图书不存在”<< endl;

break;

}

b->disp();

break;

case '5':

disp();

break;

case '6':

clear();

break;

default:cout<<“输入错误,请从新输入:”;

}

}

3、系统实现 3.1 编码

3.1.2 主函数main()include

#include

#include

//输入/输出文件流类

#include

using namespace std;

//最多的读者

const int Maxr=100;

//最多的图书

const int Maxb=100;

//每位读者最多借五本书

const int Maxbor=5;

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

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 <<“nnnttt图 书 维 护 ”<

cout<<“tt1 新 增n tt2 更 改ntt3 删 除ntt4 查 找ntt5 显 示ntt6 全 删ntt0 退 出”<

cin >> choice;

switch(choice)

{

case '1':

cout << “输入图书编号:”<

cin >> bookid;

cout << “输入图书书名:”<

cin >> bname;

addbook(bookid,bname);

break;

case '2':

cout << “输入图书编号:”<

cin >> bookid;

b=query(bookid);

if(b==NULL)

{

cout << “ 该图书不存在 ”<

break;

}

cout << “输入新的书名:”<

cin >> bname;

b->setname(bname);

break;

case '3':

cout <<“ 读入图书编号:”<

cin >> bookid;

b=query(bookid);

if(b==NULL)

{

cout <<“ 该图书不存在” << endl;

break;

}

b->delbook();

break;

case '4':

cout << “ 读入图书编号:”<

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()函数的实现,程序的主界面的引导

int main()

{

char choice;

int bookid,readerid;

RDatabase ReaderDB;

Reader *r;

BDatabase BookDB;

Book *b;

while(choice!='0')

{

cout <

cout <<“ttt1 借 书nnttt2 还 书 nnttt3 图 书 维 护nnttt4 读 者 维 护nnttt0 离 开”<

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 <<“ 不存在该图书,不能还书” <

break;

}

b->retbook();

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

break;

case '3':

BookDB.bookdata();

break;

case '4':

ReaderDB.readerdata();

break;

default:cout<<“输入错误,请从新输入:”;

4、系统维护

经测试与调试确认软件无错时,开发就告一段落,这时可以交付软件供用户使用,但是在软件的使用过程中还会面临更加漫长的工作,即软件维护。一般维护的工作有:更改使用中发现的错误;为适应实际环境而对程序进行修改;为满足新的需求而对程序作必要的改进等等。

5、归纳总结 5.1 开发经验

通过对本题目的开发,体会到要掌握以下几点内容。

 大程序的设计风格。按“自顶向下,逐步细化,模块化”的方法进行程序设计。 编写主函数,并进行测试与调试。当被调函数又需要调用其他函数时,也要遵循逐步细化的原则。C语言提供丰富的库函数,编程序时要善于使用库函数,避免不必要的劳动。 定义函数时,应选好参数的个数和数据类型。 文件使用方法。文件使用完毕后应及时关闭。

5.2 实训中遇到的问题及解决方法

在实训过程中,我遇到许多的问题,比如有些语句有语法错误,表达式不正确,或缺少}或;等。或者是没有宏定义,申明某些变量。这些都比较容易解决。通过查阅课本和请教同学,在经过WIN-TV编译,知道哪有错误就改一下就行。比较严重的是,我的代码在求解平均成绩和总分时没有录入,且乱码。自已改了很久,也在网上查询但是都不行。最后在老师的帮助下及查阅有关资料,把代码改出来了。

5.3 设计中尚存的不足之处

关于这次的程序,也有挺多不足的地方。首先,我觉得程序还不够完善,比如没有排序前和排序后的学生记录输出结果显示和有些程序功能没有满足所给题目要求及好几项都没有显示出学生具体的信息,甚至有些地方有点乱;其次,有些地方好像功能有点重复了,且编写的代码有重复;最后,就是该程序界面不够美观大方,有些文件不能链接。

5.4 感想和心得体会

通过这次实训,我感触甚深,要把所学的理论知识运用于解决实际问题不仅要付出艰辛的劳动,还得要有科学的方法和坚持不懈的努力。加上我们只是学了一个学期的c语言,我们所学的知识还不足以独立编写程序代码。但是我认为只要我们认真的去学去做,我们会受益非浅。这次实训让我进一步理解了“编程是什么”,“如何去编程”,“编程的目的又是什么”,„„发现自己的知识竟是如此贫乏,顿时感到了压力的存在,从而也激发了我的学习热情。它会成为我今后不断进取、永不懈怠的动力。

在整个实训过程中,老师给了我很大的帮助,使我由不了解怎样运用链表到逐渐懂得链表的结构及初步掌握链表结构。还重新复习了一些语句的使用,比如for(0;switch();if….elser();结构体的使用;枚举等。而且我能够坚持虚心的向老师以及同学请教问题。它使我明白了虚心好学的重要性,更让我懂得了如何跟老师同学去相处、去沟通。没有老师和同学们的无私帮助,我不可能圆满完成这次实训任务。非常感谢帮助过我的所有老师和同学们,在此,谨向他们一并表示感谢!我开始喜欢这个程序设计了,尤其觉得它是很有挑战性的,是对知识点扎实程度的考察,也是对个人能力的考察,还是对个人化毅力的考验。它让我明白做任何事都不应该轻易放弃。这样的课程设计,既有利于教学,又可以教会学生书本以外的很多知识。现在我对它越来越感兴趣,今后我会更加关注C语言程序,把C语言学好。希望老师以后多多指导,给予一定的帮助!

第五篇:连接数据库实现图书管理系统

项目构思

使用JDBC技术连接MySQL数据库,实现对图书管理系统中图书信息的浏览,增加,修改,删除功能。项目设计

1,安装并配置数据库,创建数据库,创建表及添加数据 2程序设计 文件名:index.jsp <%@ page language=“java” import=“java.sql.*” pageEncoding=“gb2312”%> <%@page errorPage=“error.jsp”%>

图书管理系统

添加图书信息

<%

Class.forName(“com.mysql.jdbc.Driver”);

Connection con DriverManager.getConnection(“jdbc:mysql://localhost:3307/school”,“root”,“ylx”);

Statement stmt = con.createStatement();

String s = “Select * FROM book”;

ResultSet rs = stmt.executeQuery(s);

while(rs.next())

{

int id=rs.getInt(1);

out.println(“

”);

}

rs.close();

stmt.close();

con.close();

%>

书名作者价格管理
”+rs.getString(2)+“”+rs.getString(3)+“”+rs.getString(4)+“修改 删除

下载JavaWeb用MV模式C实现简单的图书管理系统报告资料(最终定稿)word格式文档
下载JavaWeb用MV模式C实现简单的图书管理系统报告资料(最终定稿).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    图书管理系统设计与实现-开题报告

    开 题 报 告 毕业论文题目:图书馆管理系统的设计与实现学 校 名 称: 廊坊职业技术学院专 业 名 称: 移动通信学 生 姓 名: 陈鑫学 号: 1313080130 指 导 老 师: 郭芊羽日 期:1、......

    图书管理系统用例图

    图书管理系统 UML建模与设计模式 实验报告 计算机与信息工程学院 一、实验目的 在熟悉用例概念与应用的基础上,掌握用例模型的建立,包括: 1.掌握用例图的建立。 2.掌握用例描述文......

    图书管理系统资料(共5篇)

    具体要解决的问题如下: 图书管理系统设计 图书管理系统其实是一个很复杂的信息管理系统,它包括很多分类、检索等方面的内容。因为其复杂性,建立这样一个系统更加能体现出运用SQ......

    C语言图书管理系统课设报告(最终5篇)

    程序设计课设论文 论文题目: 图书信息管理系统 学 院: 年 级: 班 级: 姓 名: 学 号: 指导教师: 软件学院 2015级 软件工程1522班 韩汀 201515614100 邵回祖 2016年6月14日-2016年......

    图书管理系统(含源代码)c语言_数据结构课程设计报告

    数据结构大作业 121279044 伍杨 数据结构大作业 图书管理系统 工程管理 121279044 伍杨 目录 一、 二、 三、 题目要求 .......................................................

    图书管理系统设计报告

    图书管理系统设计报告 一系统开发的目标与意义 1.1设计题目 此次VFP课程设计是综合应用所学过的数据库理论知识,自行设计并实现一个较为完整的应用系统。结合一个实际信息系......

    图书管理系统开题报告

    图书管理系统开题报告2篇 图书管理系统开题报告1 一、课题的目的及意义本次毕业设计所从事的课题题目是基于VF的图书管理系统的设计与实现。课题的目的:应用当前高速发展的计......

    图书管理系统开题报告

    图书管理系统开题报告 1、本课题的研究意义(选题依据,课题来源,学术价值和对社会、经济发展和科技进步的意义):作为毕业设计这一最后环节是学生完 成本专业基础课程、专业课程......