Windows编程大作业.docx
《Windows编程大作业.docx》由会员分享,可在线阅读,更多相关《Windows编程大作业.docx(28页珍藏版)》请在冰豆网上搜索。
Windows编程大作业
Windows编程课程作业
(2010-2011学年第2学期)
课程名称:
Windows编程技术
学号:
学生姓名:
专业班级:
学院:
学生成绩:
1引言
项目背景
随着人们只是层次的提高,图书馆成为日常生活中不可缺少的一部分。
而图书馆的存书量和业务量庞大,仅仅靠传统的记账管理是不可行的。
图书管理系统应运而生,并逐渐成为信息化建设的重要组成部分。
图书管理系统为学校或社会型图书馆的管理员提供所有借阅者信息,以及管内图书库存信息。
对借书与还书两大功能进行合理操纵。
在很大程度上方便了图书管理工作。
于是在课程设计方面选择了图书管理系统作为Windows编程课程设计的题目。
2需求分析
2.1程序功能
(1)读者信息的添加,删除,查找,修改,清空
(2)图书信息的添加,查找
(3)读者借书,还书功能
2.2数据
读者信息:
读者编号,姓名,联系电话
图书信息:
图书编号,名称,数量,类别
借阅信息:
读者编号,图书编号
2.3环境
开发环境:
MicrosoftVisualC++6.0
运行环境:
(1)硬件要求:
CPU奔腾4处理器以上
(2)软件要求:
XP/Vista操作系统
3总体设计
3.1总体架构
整个图书馆里系统分为四个模块。
分别为,读者信息模块,图书信息模块,图书借阅模块和读者还书模块。
各模块的主要功能如下:
3.2模块划分
(1)读者信息相关模块设计
在此模块中,创建一个新类,命名为ReaderInfomation,顾名思义,用来编写进行对读者信息各种操作的代码。
函数及变量一览如下:
实现读者信息相关操作,对于总对话框的设计如下图:
读者信息添加模块
此模块的功能是将借阅者信息保存到系统中,在这个模块中实现了对读者编号,姓名和联系电话的添加,并带有重号提醒功能。
添加成功的读者信息可以在读者信息总览列表框中显示出来。
参考程序段如下:
voidCReaderItem:
:
OnBottonAddReader()//添加读者信息
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringf_reader_name,f_reader_num,f_reader_phone,f_add_whole;
CString/*读者编号校验变量*/check_reader_num;
//在编辑框中获取读者信息
GetDlgItem(IDC_EDIT_READER_NUM)->GetWindowText(f_reader_num);
//读者编号校验变量获得输入的编号
check_reader_num=f_reader_num;
//插入重号处理操作
for(inti=0;i{
if(reader[i].GetReaderNum()==check_reader_num)
{
MessageBox("该读者编号已存在,请核对!
");
//清空读者编号校验变量
check_reader_num="&&&&&&&&&";
return;
}
}
GetDlgItem(IDC_EDIT_READER_NAME)->GetWindowText(f_reader_name);
GetDlgItem(IDC_EDIT_READER_PHONE)->GetWindowText(f_reader_phone);
//添加读者信息-并保存到读者信息对象中
reader[reader_num].SaveReaderInformation(f_reader_num,f_reader_name,f_reader_phone);
//初始化读者可借书籍数目
reader[reader_num].InitReader_borrow_book_num();//初始化后,读者可借书籍数目总数为10
//读者总数+1
reader_num++;//读者总数+1
//连接总串
f_add_whole=f_reader_num+""+f_reader_name+""+f_reader_phone;
//在添加读者信息列表框显示
m_all_reader_show.AddString(f_add_whole);
MessageBox("添加成功!
");
}
读者信息查找模块
此模块的功能实在已添加的读者信息中通过输入的读者编号找到想要查找对应的读者信息。
并带有刷新查找列表框,排除在同一列表框显示多人混淆目标的情况,以及对查无对应读者信息的提示处理。
具体程序段如下:
voidCReaderItem:
:
OnBottonFindReader()//查找读者信息
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringf_reader_num,f_add_whole;
CString/*读者编号校验变量*/check_reader_num;
intcheck_flag=0;//查找结果标志,0为没找到,1为找到
//清空列表框
m_find_reader_show.ResetContent();
//在编辑框中获取读者信息
GetDlgItem(IDC_EDIT_READER_NUM)->GetWindowText(f_reader_num);
//读者编号校验变量获得输入的编号
check_reader_num=f_reader_num;
for(inti=0;i{
if(reader[i].GetReaderNum()==check_reader_num)
{
//获取读者信息
reader[i].GetReaderItem(f_add_whole);
//显示在列表框中
m_find_reader_show.AddString(reader[i].GetReaderItem(f_add_whole));
//置找到标志为1
check_flag=1;
//清空读者编号校验变量
check_reader_num="&&&&&&&&&";
}
}
if(check_flag==0)MessageBox("对不起,查无此读者!
");
}
读者信息删除模块
此模块对要清除的读者信息进行删除,不但从列表框能清楚对应读者的信息,也能在内存中实际删除信息,实现显示与控制同步的过程。
并带有提示请使用者确定是否删除的选择权。
具体程序段如下:
voidCReaderItem:
:
OnBottonDelReader2()//删除读者信息函数
{
//TODO:
Addyourcontrolnotificationhandlercodehere
intcursel=m_all_reader_show.GetCurSel();//光标锁定
if(cursel==-1)
{
MessageBox("没有选中");
return;
}
else
{
if(IDYES==MessageBox("是否删除","删除对话框",MB_ICONHAND|MB_YESNO))
{
for(intk=cursel;kreader[k]=reader[k+1];
m_all_reader_show.DeleteString(cursel);
reader_num--;
}
}
}
读者信息修改模块
此模块是对读者信息进行修改,通过选中列表框的读者信息条目,用双击鼠标消息响应来弹出修改窗口,让使用者将修改的数据重新填入,并将修改后的数据重新显示在列表框内。
具体程序段如下:
voidCReaderItem:
:
OnDblclkAllReaderList()//修改读者信息引入函数
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
CStringstradd;
cursel_ch=m_all_reader_show.GetCurSel();//选定的行
CChangechange;
change.DoModal();
m_all_reader_show.DeleteString(cursel_ch);//删除原行
m_all_reader_show.AddString(reader[cursel_ch].GetReaderItem(stradd));//显示新信息
UpdateData(false);
}
//双击后,将弹出新对话框,如下图:
对于上图中修改对话框的程序段,如下:
voidCChange:
:
OnBottonChange()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringf_reader_name,f_reader_num,f_reader_phone,f_add_whole;
CString/*读者编号校验变量*/check_reader_num;
//在编辑框中获取读者信息
GetDlgItem(IDC_EDIT_READER_NUM)->GetWindowText(f_reader_num);
//读者编号校验变量获得输入的编号
check_reader_num=f_reader_num;
//插入重号处理操作
for(inti=0;i{
if(reader[i].GetReaderNum()==check_reader_num&&(i!
=cursel_ch))
{
MessageBox("该读者编号已存在,请核对!
");
//清空读者编号校验变量
check_reader_num="&&&&&&&&&";
return;
}
}
GetDlgItem(IDC_EDIT_READER_NAME)->GetWindowText(f_reader_name);
GetDlgItem(IDC_EDIT_READER_PHONE)->GetWindowText(f_reader_phone);
//将新信息存到读者对象中
reader[cursel_ch].SetReaderItem(f_reader_num,f_reader_name,f_reader_phone);
CDialog:
:
OnOK();
}
读者信息清空模块
此模块只清空除读者信息总览列表框以外的控件内信息。
只要点击清除按钮,就可以实现此功能。
具体程序段如下:
voidCReaderItem:
:
OnBottonCleanReader()//清空读者信息显示函数
{
//TODO:
Addyourcontrolnotificationhandlercodehere
//清编辑框
GetDlgItem(IDC_EDIT_READER_NUM)->SetWindowText("");
GetDlgItem(IDC_EDIT_READER_NAME)->SetWindowText("");
GetDlgItem(IDC_EDIT_READER_PHONE)->SetWindowText("");
//清列表框
//m_all_reader_show.ResetContent();
m_find_reader_show.ResetContent();
}
(2)图书信息相关模块设计
此模块是对图书馆内图书信息进行操作的部分,图书信息包括图书编号,图书类别和图书的库存数量。
在模块中可以实现对图书信息的添加、查找、借书和还书功能。
对话框窗口设计如下图:
在程序内部,创建了一个新类,通过各种成员函数来实现对应的图书信息操作。
类成员列表如下图:
图书信息添加模块
此模块的作用类似于读者信息添加模块,可以对图书信息进行添加,并实现了重号报错等功能。
添加成功的信息可以在图书信息总览列表框内显示出来。
具体程序段如下:
voidCBookItemDlg:
:
OnBottonAddBook()//添加图书信息
{
//TODO:
Addyourcontrolnotificationhandlercodehere
charf_book_num_string[20]="";
CStringf_book_code,f_book_name,f_book_kind,f_book_total,f_book_num_cstring;
intf_book_num_int;
CStringcheck_book_code;
GetDlgItem(IDC_EDIT_BOOK_CODE)->GetWindowText(f_book_code);
//图书编号校验变量获得输入的编号
check_book_code=f_book_code;
//插入重号处理操作
for(inti=0;i{
if(book[i].GetBookCode()==check_book_code)
{
MessageBox("该图书编号已存在,请核对!
");
//清空图书编号校验变量
check_book_code="&&&&&&&&&";
return;
}
}
//f_book_num_int=m_book_num;
//f_book_num_cstring=itoa(f_book_num_int,f_book_num_string,10);
GetDlgItem(IDC_EDIT_BOOK_NAME)->GetWindowText(f_book_name);
GetDlgItem(IDC_EDIT_BOOK_NUM)->GetWindowText(f_book_num_cstring);
//将图书信息对象中的图书数量变量进行转换,将CString转换成int
f_book_num_int=atoi(f_book_num_cstring);
//选中已查找到的图书
intindex=m_book_kind.GetCurSel();
m_book_kind.GetLBText(index,f_book_kind);
f_book_total=f_book_code+""+f_book_name+""+f_book_kind+""+f_book_num_cstring;
//保存书籍信息
book[book_num].SaveBookItem(f_book_code,f_book_name,f_book_num_int,f_book_kind);
book_num++;
//在图书总揽列表中显示
m_all_book_show.AddString(f_book_total);
MessageBox("添加成功!
");
}
图书信息查找模块
此模块是对确定了图书编号的图书进行查找的部分,通过在图书编号编辑框输入想要查找的图书编号,然后鼠标单击查找图书按钮,就会在查找列表框显示对应的图书信息,但是若欲查找的图书编号不存在,则提示说此图书不存在。
具体程序段如下:
voidCBookItemDlg:
:
OnBottonFindBook()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringf_book_code,f_book_total;
CString/*图书编号校验变量*/check_book_code;
intcheck_flag=0;//查找结果标志,0为没找到,1为找到
//清空列表框
m_find_book_show.ResetContent();
//在编辑框中获取图书信息
GetDlgItem(IDC_EDIT_BOOK_CODE)->GetWindowText(f_book_code);
//读者编号校验变量获得输入的编号
check_book_code=f_book_code;
for(inti=0;i{
if(book[i].GetBookCode()==check_book_code)
{
//把查找到的书籍序号获得
cursel_find_book_show=i;
//获取图书信息
total_string_among_function=book[i].GetBookItem(f_book_total);
//显示在列表框中
m_find_book_show.AddString(book[i].GetBookItem(f_book_total));
//置找到标志为1
check_flag=1;
//清空图书编号校验变量
check_book_code="&&&&&&&&&";
}
}
if(check_flag==0)
{
MessageBox("对不起,查无此图书!
");
cursel_find_book_show=-1;
}
}
读者借阅图书模块
此模块实现已登记于图书馆内的读者借出图书操作。
首先通过输入图书编号查找到想要借阅的图书,然后在图书信息检索列表框内选中查找到的图书,鼠标单击借阅图书,就会弹出图书借阅对话框,首先输入读者编号并单击缺人读者调出读者信息,如果读者存在可以单机确定借书按钮进行确认,如果读者可借书数目已为零,则会弹出提示提醒使用者。
如果书籍借出,则读者信息确认列表框中读者可借书数量会减一。
关闭借书对话框后,会发现图书信息检索列表框和图书信息总览列表框对应刚借出的图书数量也已减一,从而实现了图书的借阅。
在图书信息对话框中的程序段如下:
voidCBookItemDlg:
:
OnBottonBorrowBook()//借阅图书
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
CStringf_add_whole;
intget_book_num;
CBorrowBookDlgBorrowBookDlg;
if(cursel_find_book_show!
=-1)//对应选中书籍
{
//获得图书剩余数量
get_book_num=book[cursel_find_book_show].GetBookNum();
if(book_num==0)
{
MessageBox("对不起,当前没有图书!
!
");
return;
}
if(get_book_num==0)
{
MessageBox("对不起,该图书数量为0,无法借出!
");
return;
}
BorrowBookDlg.DoModal();
//删除原行
m_all_book_show.DeleteString(cursel_find_book_show);
//清空列表框
m_find_book_show.ResetContent();
//显示新数据
m_find_book_show.AddString(book[cursel_find_book_show].GetBookItem(f_add_whole));
m_all_book_show.AddString(book[cursel_find_book_show].GetBookItem(f_add_whole));
}
else
{
MessageBox("没有相关书籍资料!
!
");
return;
}
UpdateData(false);
}
图书借阅对话框如下图:
实现程序段如下:
voidCBorrowBookDlg:
:
OnBorrowBook()//确定借书
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringf_add_whole;
intget_reader_borrow_book_num,get_book_num;
//判断是否选中书籍
if(cursel_find_book_show==-1)
{
MessageBox("没有确定相关书籍!
!
");
return;
}
//获得读者可借书籍数量
get_reader_borrow_book_num=reader[reader_count].GetReader_Borrow_book_num();
//判断读者是否还可借出
if(get_reader_borrow_book_num==0)
{
MessageBox("对不起,借书数量超额!
");
return;
}
//获得图书剩余数量
/*
get_book_num=book[cursel_find_book_show].GetBookNum();
if(get_book_num==0)
{
MessageBox("对不起,该图书数量为0,无法借出!
");
return;
}*/
else
{
//对应书籍借出
book[cursel_find_book_show].Borrow_Out();
//该读者借书成功,可借书数目-1
reader[reader_count].BorrowBook();
//清空读者列表
m_reader_id_show.ResetContent();
//获取读者信息
f_add_whole=reader[reader_count].GetReader_Book_Item();
//重新在读者信息列表显示
m_reader_id_show.AddString(f_add_whole);
}
}
读者归还图书模块
此模块实现了读者将确定编号的图书归还给图书馆的系列操作。
通过在图书信息对话框中的图书编号编辑框输入欲还书的编号,然后查找到该图书,之后鼠标单击归还图书按钮就会弹出还书对话框。
在还书对话框中的读者编号编辑框中输入欲还书的读者编号,单击确认读者,如果读者存在,则将对应读者信息在下方列表框中显示,如果不存在则提示使用者无此读者。
在鼠标单击确认还书之后,读者可借书数量加一,关闭还书对话框后,会看到图