数据库实训+邮局订报管理系统文档格式.docx
《数据库实训+邮局订报管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《数据库实训+邮局订报管理系统文档格式.docx(54页珍藏版)》请在冰点文库上搜索。
第1周第3天-第5天:
系统分析和设计
第2周第1天-第3天:
编程和测试,撰写设计报告
第2周第4天—第5天:
课程设计检查,交设计报告
四、主要参考资料
[1]《数据库原理及应用》钱雪忠主编北京邮电大学出版社2012,6,第三版
[2]陈刚等编著。
Powerbuilder《案例开发程序设计教程》。
北京.清华大学出版社.2012
[3]杨诏主编。
Powerbuilder8.0《编程实用技术与案例》。
北京。
水利水电出版社。
2012
[4]卫海登.Powerbuilder9.0《课程设计案例精编》.北京。
中国水利水电出版社。
[5]王晟编著。
Powerbuilder《数据库开发经典案例解析》。
清华大学出版社.2012
一、需求分析
1。
1用户需求
1、可随时查询处可订购报纸的详细情况,如报纸编号(PNO)、报纸名称(PNA)、报纸单价(5、版面规格(PSI)、出版单位(PDW)等,这样便于客户选定.
2、客户查询报纸情况后即可订购所需报纸,可订购多种报纸,每种报纸可订若干份,交清所需金额后,就算订购处理完成。
3、为便于邮局投递报纸,客户需写明如下信息:
客户姓名(CAN)、电话(CAD)、地址(CAW)及邮政编码(CAY),邮局将即时为每一客户编制唯一代码(CNA)。
4、邮局对每种报纸订购人数不限,每个客户可多次订购报纸,所定报纸亦可重复。
5、能对报纸、客户等信息进行添加、修改、删除、查询、打印等基本操作。
6、能根据订报要求订购各报纸,并完成一次订购任务后汇总总金额,模拟付钱、开票操作。
7、能明细查询某客户的订报情况及某报纸的订出情况。
8、能统计出某报纸的总订购量与总金额及某客户订购报纸种数、报纸份数与总订购金额等。
1.2系统功能需求
1、在SQLServer 中建立各相应的关系模式对应的库表,并确定索引等.
2、能对各库表进行输入,添加,修改,删除,查询,打印等基本操作。
3、查询功能:
能根据邮局订报管理系统,管理员实现报纸的管理功能,用户实现报纸订阅和退订功能。
4、统计功能:
能名细查询每报纸的总订数量与总金额及客户订购报纸种类,份数和总金额.
5、要求子系统设计界面友好,功能操作方便合理,并考虑子系统在安全性,完整性方面的功能要求。
6用户管理功能,如:
用户登陆等。
1.3系统软硬件环境确定
系统开发工具为局域网或校园网网络环境,网络中有一台安装了windows xp的服务器,服务器上安装了SQLServer2000,本子系统使用C#开发。
二、系统功能设计
2。
1系统功能结构
1、查询报纸
2、订报纸
3、开票
4、付钱结算
5、订购后的查询
6、统计
2.2系统功能处理流程
图2—1系统流图
三、系统数据库设计
3。
1数据库概念设计
数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接决定对应用系统的效率以及实现的效果的影响。
合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。
同时,合理的数据库也有利与应用系统程序的实现.
在充分的寻求分析基础上,经过逐步抽象,分析,充分研讨,可画出如下反映邮局订报子系统数据的整体
图3-1E-R图
2数据库逻辑设计
1、数据库关系模式
News_info(PNO,PN,PPR,PSI,PDW)
报纸(报纸编号,报纸名称,报纸价格,版面规格,出版单位)
customer_info(CAN,CAD,CAW,CAY)
客户(客户名称,电话,地址,邮政编码)
sub_news(PNO,CAN,NUM)
订购(报纸编号,客户名称,数量)
2、数据库的视图
3.3数据库物理设计
本系统使用的数据库是SQL2000,根据已设计出的关系模式及各关系模式的完整性约束要求,在SQL2000数据库系统中实现这些逻辑结构。
数据库表的创建
本系统使用的数据库名为newspaper下面是创建数据库及其表结构的SQL命令:
CREATETABLELOGININ(
CNOvarCHAR(20)PRIMARYKEY,
PSWvarCHAR(20))
CREATETABLECustomer(
CNAvarCHAR(50),
CTEvarCHAR(15),
CADvarCHAR(50),
CPOvarCHAR(10),
FOREIGNKEY(CNO)REFERENCESLOGININ(CNO))
CREATETABLEnews_info(
PNOvarCHAR(20)PRIMARYKEY,
PNAvarCHAR(50),
PPRFLOAT,
PSIvarCHAR(50),
PDWvarCHAR(50))
CREATETABLESubcribe(
CNOvarCHAR(20),
PNOvarCHAR(20),
NUMSMALLINT,
FOREIGNKEY(CNO)REFERENCESLOGININ(CNO),
FOREIGNKEY(PNO)REFERENCESnews_info(PNO),
PRIMARYKEY(CAN,PNO))
四、系统实现
4。
1数据库连接的实现
classconnection
{
SqlConnectionconn;
publicSqlConnectionconnect
get
returnthis。
conn;
}
}
publicvoidCreateConnection()
conn=newSqlConnection(”datasource=.;
initialcatalog=SubcribPost;
userID=sa”);
this。
conn。
Open();
SqlCommandcommand=this。
CreateCommand();
staticvoidMain()
{
conn=newconnection();
conn.CreateConnection();
Application.EnableVisualStyles();
Application。
SetCompatibleTextRenderingDefault(false);
Run(newlogFrm()
4.2用户登录功能的实现
usingSystem;
usingSystem.Collections。
Generic;
usingSystem。
ComponentModel;
usingSystem.Data;
usingSystem.Data.SqlClient;
Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
namespace邮局订报
publicpartialclassadmin:
Form
{
publicadmin()
InitializeComponent();
}
privatevoidbutton1_Click(objectsender,EventArgse)
stringusername=textBox1.Text;
stringpassword=textBox2.Text;
SqlConnectionsqlCon=newSqlConnection();
SqlCommandLogInCommand=newSqlCommand();
SqlDataAdapteruserAdapter=newSqlDataAdapter();
DataSetdt=newDataSet();
sqlCon.ConnectionString=”DataSource=。
;
InitialCatalog=newspaper;
IntegratedSecurity=True;
"
;
LogInCommand。
Connection=sqlCon;
CommandText="
SELECTusername,passwordFrom[user]whereusername=’"
+username+"
'
andpassword=’"
+password+"
’"
userAdapter。
SelectCommand=LogInCommand;
SelectCommand.Connection=sqlCon;
sqlCon.Open();
Fill(dt,"
UserInfo"
);
//填充数据集
if(dt。
Tables[0]。
Rows.Count〉0)
MessageBox。
Show(”登陆成功"
this。
Visible=false;
Form1fr=newForm1
(1);
fr。
ShowDialog();
}
else
MessageBox.Show("
失败”);
privatevoidadmin_Load(objectsender,EventArgse)
{
textBox1.Focus();
privatevoidbutton2_Click(objectsender,EventArgse)
this.Close();
privatevoidbutton3_Click(objectsender,EventArgse)
Form1fr=newForm1(0);
fr.ShowDialog();
privatevoidlabel2_Click(objectsender,EventArgse)
1、}管理员登录
图4—1登录
图4-2管理员界面
2、已注册用户登录
图4—3普通用户登录
点击确定后即可进入用户订报界面.
3、新用户登录
图4-4新用户登录
图4—5信息提示
注册个人信息的代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
Data;
usingSystem.Data。
SqlClient;
Text;
usingSystem.Windows。
Forms;
publicpartialclassyonghu:
publicyonghu()
privatevoidbutton5_Click(objectsender,EventArgse)
SqlConnectionsqconn=newSqlConnection(”DataSource=。
InitialCatalog=newspaper;
IntegratedSecurity=True”);
stringsql=String。
Format("
insertintocustomer_info(CAN,CAD,CAW,CAY)VALUES(’{0}'
,’{1}'
’{2}'
,{3})”,textBox1.Text,textBox2.Text,textBox3。
Text,Convert。
ToUInt64(textBox4.Text));
try
sqconn.Open();
SqlCommandcommand=newSqlCommand(sql,sqconn);
intcount=command.ExecuteNonQuery();
if(count>
0)
Show(”注册成功"
”注册信息”,MessageBoxButtons.OK,MessageBoxIcon。
Information);
MessageBox.Show(”注册失败”);
catch(Exceptionex)
MessageBox.Show(ex.Message,"
操作数据库错误!
”,MessageBoxButtons。
OK,MessageBoxIcon.Exclamation);
finally
sqconn。
Close();
确定后即进入订报界面.
3用户订购报纸功能的实现
选好报纸后,输入要订购的份数,点击订购,即完成报纸的订购。
图4—7用户界面
ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
Forms;
publicpartialclassdinggou:
publicdinggou()
privatevoiddinggou_Load(objectsender,EventArgse)
IntegratedSecurity=True;
”);
stringstri=”selectdistinctPNAfromnews_info”;
SqlDataAdaptersdat=newSqlDataAdapter(stri,sqconn);
DataSetDset=newDataSet();
sdat。
Fill(Dset);
comboBox1.DataSource=Dset.Tables[0];
Show(ex.Message,"
”,MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
Close();
privatevoidbutton6_Click(objectsender,EventArgse)
intmon=0,num=0;
SqlConnectionsqconn=newSqlConnection("
DataSource=.;
”);
stringstri=String.Format(”selectPPR,PNUMfromnews_infowherePNA='
{0}'
comboBox1。
Text);
//stringstri_i=String.Format(”selectCAD,CAWfromcustomer_infowhereCAN=’{0}’”,comboBox2.Text);
SqlCommandcom;
com=newSqlCommand(stri,sqconn);
SqlDataReaderre=com.ExecuteReader();
re.Read();
mon=Convert。
ToInt32(re[0]);
num=Convert。
ToInt32(re[1]);
MessageBox.Show(ex。
Message,”操作数据库错误!
,MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
sqconn.Close();
if(num>
=Convert。
ToInt32(textBox2。
Text))
intmoney=mon*Convert.ToInt32(textBox2。
stri=String.Format(”insertintosub_news()VALUES(’{0}'
’{1}’,’{2}’)"
,comboBox1.Text,textBox2.Text,Convert。
ToInt32(textBox1。
Text));
stringstru=”updatenews_infosetNUM=”+(num-Convert。
ToInt32(textBox2.Text));
sqconn.Open();
com=newSqlCommand(stri,sqconn);
intcount=com.ExecuteNonQuery();
com=newSqlCommand(stru,sqconn);
intco=com.ExecuteNonQuery();
if(count〉0&&co〉0)
MessageBox.Show(”订报成功"
"
订阅报纸”,MessageBoxButtons。
OK,MessageBoxIcon.Information);
MessageBox.Show(”订报失败"
);
Message,"
MessageBoxButtons.OK,MessageBoxIcon。
Exclamation);
Show("
报纸剩余数量不足!
4用户查看自己已订阅报纸的功能的实现
图4-10用户查看
4.5用户退订报纸功能的实现
用户在已订阅栏里可选择想要退订的报纸,然后点击退订按钮即可实现报纸的退订。
图4—11已定报纸
usingSystem.Collections.Generic;
Data;
usingSystem.Text;
usingSystem.Windows.Forms;
publicpartialclassstate:
publicstate()
//privatevoidstate_Load(objectsender,EventArgse)
//{
//this.button2.Visible=false;
//}
DataSource=.;
IntegratedSecurity=True"
stringstri=String.Format(”selectPNO报纸编号,CAN客户姓名,NUM报纸数量fromsub_newswhereCAN=’{0}'
textBox1。
Text);
Open();
SqlDa