书店管理系统源代码

2024-08-11

书店管理系统源代码(通用8篇)

书店管理系统源代码 篇1

Java 源代码

public class loaduser { public String user;public String password;boolean b1;loaduser(String s1,String s2){

user=s1;

password=s2;} void load(){

System.out.println(“ 书店管理销售系统”);

System.out.println(“**************************************”);System.out.println(“

1、登录系统”);System.out.println(“

2、退出系统”);

System.out.println(“**************************************”);System.out.println(“请选择:”);

int m;Scanner s=new Scanner(System.in);m=s.nextInt();

if(m==1){

for(int i=0;i<3;i++){

System.out.println(“请输入账户名和密码”);

String s3,s4;

Scanner ss=new Scanner(System.in);

s3=s.next();

s4=s.next();

if(user.equals(s3)&&password.equals(s4))b1=true;

else b1=false;

if(i==0&&b1==false)System.out.println(“用户名或密码输入错误一次,还有两次机会!”);

if(i==1&&b1==false)System.out.println(“用户名或密码输入错误两次,还有一次机会!”);

if(i==2&&b1==false){System.out.println(“三次输入错误,退出系统!”);System.exit(0);}

if(b1==true){

System.out.println(“登录成功!”);

break;} } }

if(m==2)System.exit(0);}

package manger;import java.util.ArrayList;import java.util.Scanner;import manger.vip;import System.menu;public class vipmanger { static ArrayList vipgroup=new ArrayList();public vipmanger(){

vipgroup.add(new vip(“001”,“王芳”,100));

vipgroup.add(new vip(“002”,“李娜”,60));

vipgroup.add(new vip(“003”,“杨丽”,50));

vipgroup.add(new vip(“004”,“孙洁”,150));

vipgroup.add(new vip(“005”,“肖青”,300));} static void addd(){ System.out.println(“请一次输入编号,姓名,积分”);

String S1,S2;

int A;

Scanner s=new Scanner(System.in);

S1=s.next();

S2=s.next();

A=s.nextInt();

vip v1=new vip(S1,S2,A);vipgroup.add(v1);}

static void delete(){ System.out.println(“请输入要求删除的会员编号:”);String s;Scanner me=new Scanner(System.in);s=me.next();

boolean b1=true;

for(int i=0;i

if(s.equals(vipgroup.get(i).ID)){vipgroup.remove(i);b1=false;}

if(b1)System.out.println(“查无此会员!”);} static void correct(){ System.out.println(“请输入要修改信息的会员编号:”);String sss;Scanner s=new Scanner(System.in);sss=s.next();

boolean b1=true;

for(int i=0;i

if(sss.equals(vipgroup.get(i).ID)){

b1=false;

System.out.println(“请输入新的姓名和积分:”);

String ss1;Scanner s7=new Scanner(System.in);ss1=s7.next();vipgroup.get(i).name=ss1;int b;

Scanner s8=new Scanner(System.in);

b=s8.nextInt();

vipgroup.get(i).score=b;}

if(b1==true)System.out.println(“查无此会员!”);} static void select(){ System.out.println(“请输入要查询的会员编号:”);String s;Scanner me=new Scanner(System.in);s=me.next();

boolean b1=true;

for(int i=0;i

if

(s.equals(vipgroup.get(i).ID)){System.out.println(vipgroup.get(i).ID+“ ”+vipgroup.get(i).name+“ ”+vipgroup.get(i).score);b1=false;}

if(b1==true)System.out.println(“查无此会员!”);} static void show(){

for(int i=0;i

System.out.println(vipgroup.get(i).ID+“ ”+vipgroup.get(i).name+“ ”+vipgroup.get(i).score);} public static void exchange(String s1,int a,int b){

boolean b1=true;

for(int i=0;i

if(s1.equals(vipgroup.get(i).ID))

{if(vipgroup.get(i).score<(a*b))System.out.println(“积分不足,不能兑换!”);

else vipgroup.get(i).score-=a*b;

b1=false;

} if(b1==true)System.out.println(“查无此会员,不能兑换!”);} public static void shop(String s1,int a,int b){

boolean b1=true;

for(int

i=0;i

if(b1==true)System.out.println(“查无此会员,不能购买!”);} public static boolean start(){ menu m=new menu();m.vip();

int x;Scanner me= new Scanner(System.in);x=me.nextInt();

switch(x){

case 1:show();break;

case 2:delete();break;

case 3:addd();break;

case 4:correct();break;

case 5:select();break;

case 6:return false;}

return true;} }

public class book {

public String number;

public String name;

public int price;

public int jf;book(String s1,String s2,int a,int b){

number=s1;

name=s2;

price=a;

jf=b;}

}

package manger;import java.util.ArrayList;import java.util.Scanner;import System.menu;public class bookmanger {

static ArrayList bookgroup=new ArrayList();public bookmanger(){ bookgroup.add(new book(“001”,“c语言”,20,20));bookgroup.add(new book(“002”,“大学英语”,22,22));bookgroup.add(new book(“003”,“高等数学”,28,28));} static void show(){ for(int i=0;i

for(i=0;i

return a;} public static String name(String s1){ String a = “无此书”;for(int i=0;i

return a;} public static boolean start(){ menu m=new menu();m.bookmanger();int x;Scanner me= new Scanner(System.in);x=me.nextInt();switch(x){ case 1:show();break;case 2:delete();break;case 3:addd();break;case 4:return false;} return true;} }

public class gift { public String number;public String caption;public int costjf;gift(String s1,String s2,int a){ number=s1;caption=s2;costjf=a;} }

package manger;import java.util.ArrayList;import java.util.Scanner;import manger.vipmanger;import manger.vip;import System.menu;import manger.gift;public class giftmanger { static ArrayList giftgroup=new ArrayList();public giftmanger(){

giftgroup.add(new gift(“001”,“鼠标垫”,100));

giftgroup.add(new gift(“002”,“书夹子”,50));

giftgroup.add(new gift(“003”,“中性笔”,30));} static void show(){ for(int i=0;i

System.out.println(“请输入要删除的礼品编号:”);

String s;

Scanner ss=new Scanner(System.in);

s=ss.next();

boolean b1=true;

for(int i=0;i

if(s.equals(giftgroup.get(i).number))

{giftgroup.remove(i);

b1=false;

}

if(b1)System.out.println(“查无此礼品!”);} static void addd(){

System.out.println(“请输入要添加的礼品编号,名称,所需积分:”);

String s1,s2;

int a;

Scanner me=new Scanner(System.in);

s1=me.next();

s2=me.next();

a=me.nextInt();

gift g1=new gift(s1,s2,a);

giftgroup.add(g1);} static void exchange(){

String s1,s2,c=“无此礼品”;

int a,b=0;

giftmanger.show();

Scanner me=new Scanner(System.in);

System.out.println(“请输入您的会员编号:”);

s1=me.next();

System.out.println(“请输入您要兑换的礼品编号:”);

s2=me.next();

System.out.println(“请输入您要兑换的礼品数量:”);

a=me.nextInt();

boolean b1=true;

for(int i=0;i

{b=giftgroup.get(i).costjf;

c=giftgroup.get(i).caption;

b1=false;

}

if(b1==true)System.out.println(“查无此礼品!”);

else vipmanger.exchange(s1, a, b);

System.out.println(“兑换结果:”);

System.out.println(“礼品名称”+“ ”+“礼品积分”+“ ”+“礼品数量”+“ ”+“消耗积分”);

System.out.println(c+“ ”+b+“ ”+a+“ ”+(a*b));} public static boolean start(){

menu m=new menu();

m.gift();

int x;

Scanner me= new Scanner(System.in);

x=me.nextInt();

switch(x){

case 1:show();break;

case 2:delete();break;

case 3:addd();break;

case 4:exchange();break;

case 5:return false;

}

return true;} }

public class shoping { static void shop(){ bookmanger.show();String s1,s2,s3;

int a,b=0;Scanner me=new Scanner(System.in);System.out.println(“请输入您的会员编号:”);s1=me.next();System.out.println(“请输入书籍编号:”);s2=me.next();System.out.println(“请输入购买数量:”);a=me.nextInt();b=bookmanger.price(s2);s3=bookmanger.name(s2);System.out.println(“书名”+“ ”+“单价”+“ ”+“数量”+“ ”+“总价”);System.out.println(s3+“ ”+b+“ ”+a+“ ”+(a*b));vipmanger.shop(s1, a, b);} public static boolean start(){ menu m=new menu();

m.shopping();

int x;

Scanner me= new Scanner(System.in);

x=me.nextInt();

switch(x){

case 1:shop();break;

case 2:return false;

}

return true;} }

public class menu {

void mainmenu(){

System.out.println(“

书店管理系统”);

System.out.println(“****************************”);

System.out.println(“书店管理系统”);

System.out.println(“

1、会员管理”);

System.out.println(“

2、书籍管理”);

System.out.println(“

3、购物结算”);

System.out.println(“

4、积分兑换礼品”);

System.out.println(“

5、注销”);

System.out.println(“****************************”);

}

public void vip(){

System.out.println(“书店管理系统>会员管理:”);

System.out.println(“****************************”);

System.out.println(“

1、显示会员信息”);

System.out.println(“

2、删除会员”);

System.out.println(“

3、添加会员”);

System.out.println(“

4、修改会员信息”);

System.out.println(“

5、查询会员”);

System.out.println(“

6、返回上层菜单”);

System.out.println(“****************************”);

}

public void bookmanger(){

System.out.println(“书店管理系统>书籍管理:”);

System.out.println(“****************************”);

System.out.println(“

1、书籍信息查询”);

System.out.println(“

2、删除书籍”);

System.out.println(“

3、添加书籍”);

System.out.println(“

4、返回上层菜单”);

System.out.println(“****************************”);

}

public void shopping(){

System.out.println(“书店管理系统>购物结算:”);

System.out.println(“****************************”);

System.out.println(“

1、购物”);

System.out.println(“

2、返回上层菜单”);

System.out.println(“****************************”);

}

public void gift(){

System.out.println(“书店管理系统>礼品兑换:”);

System.out.println(“****************************”);

System.out.println(“

1、礼品信息”);

System.out.println(“

2、删除礼品”);

System.out.println(“

3、添加礼品”);

System.out.println(“

4、兑换礼品”);

System.out.println(“

5、返回上层菜单”);

System.out.println(“****************************”);

}

public static void main(String[] args){

loaduser u1=new loaduser(“manger”,“416426”);

u1.load();menu m1=new menu();

vipmanger vip=new vipmanger();bookmanger book=new bookmanger();giftmanger gi=new giftmanger();

while(true){

m1.mainmenu();

int x;

Scanner me=new Scanner(System.in);

x=me.nextInt();

switch(x){

case 1:while(vipmanger.start());break;

case 2:while(bookmanger.start());break;

case 3:while(shoping.start());break;

case 4:while(giftmanger.start());break;

case 5:u1.load();

}

}

} }

书店管理系统源代码 篇2

在嵌入式软件开发的过程中, 由于目标机通常不具备自举开发的能力, 嵌入式软件开发大多采取远程调试 (交叉调试) 的方式, 即让调试器运行在宿主机上, 被调试程序运行在目标机上, 主机和目标机之间通过某种通信端口如串口、并口、以太网等进行连接。

ARC810是台湾信亿科技生产的32位处理器, 笔者所在的实验室为其开发了一套调试工具【1】, 并命名为ARCDSU, 该调试工具的宿主机为PC机, 通过串口发送调试命令给目标机, 待调试的程序也通过串口进行下载。经过测试, 发现下载速度只有3.79kB/s, 当调试比较大的程序, 如Linux内核, 下载速度慢影响了调试速度。针对这个不足, 本文根据ARC810具有PCI接口的特点, 设计了通过PCI以太网卡下载待调试程序的方案, 下载速度达到418kB/s, 取得了满意的结果。

1、ARC810调试基本原理

ARC810处理器是基于LEON2内核的一款SOC芯片, LEON2内核是欧洲航天局所属研究所开发的基于SPARC V8架构的开源的32位RISC处理器。ARC810的调试方法与LEON2相同, 通过芯片上的调试支持单元进行软件调试, 该单元由2个模块组成:调试支持单元 (DSU) 和调试通信链路 (DCL) 。DSU能够使处理器进入调试模式, 只有在调试模式下才能访问处理器的寄存器和高速缓存器;DSU还包含了一个跟踪缓存器, 这个缓存器存储了执行过的指令和在AHB总线上传输的数据。DCL使用一个标准的异步UART来实现与宿主机上运行的软件调试器通信, 通信协议是简单的读写协议[2]。该硬件调试单元的模块图如图1所示。

笔者所在的实验室以模块化的思想为ARC810开发了一套调试工具ARCDSU, 其宿主机和目标机之间采取的串口通讯方式极大的限制了待调试程序的下载速度, 因此本文设计了通过以太网卡下载待调试程序的方案并加以实现。

2、基于以太网调试的方案设计

2.1 硬件系统结构

ARC810的内部模块图[3]如图2所示:

该处理器采用SPARC V8结构的32位处理器, 具有分开的指令和数据缓冲, 硬件乘除法器, 中断控制器, 带有跟踪缓冲区的调试支持单元、2个24位Timer、2个UART、1个watchdog、16位的I/O口、内存控制器、PCI接口和SPI。

ARC810支持PCI2.2标准, 可以通过PCI口扩展外设。本论文的实验平台具有PCI插槽, 在插槽上插入D-Link公司所生产的DFE-530TX, REV-C2网卡, 通过该PCI网卡实现目标机和宿主机之间的通讯。

2.2:软件系统结构

2.2.1:目标机网卡监听程序

该网卡监听程序由于涉及到以太网数据的接受和发送, 因此和网卡的驱动程序在网卡初始化, 网卡数据缓冲区的设计上都有相似之处, 但是由于并不和操作系统打交道, 因此在数据包的接受和发送上面与驱动程序又有所不同。系统流程图如图3所示:

网卡的初始化主要完成网卡的挂载, 网卡相关寄存器的初始化, 网卡发送和接受缓冲区的分配等工作。只有网卡正常初始化之后, 数据的接受和发送才能正常的进行。在网卡的初始化过程中由于要对网卡寄存器进行读写, 因此首先要确保I/O函数的正确性, 尤其要注意大小端的问题, 在分配发送、接受缓冲区的时候要根据所用网卡的硬件要求来处理字节对齐的问题[4], 否则网卡不能正确的收发。由于不涉及到操作系统, 我们还需要读出网卡的MAC地址, 以供网卡在接收和发送数据时使用。

网卡采取轮询的方式来接收PC机发送的数据包, 并根据数据包的种类回应相应的包。由于没有网络协议栈, 收到的数据包是否是目标机所需要的, 以及数据包的类型都需要我们自己来判断。判断的依据是数据包的以太网包头。我们根据包头的type code来判断收到的数据包是ARP包还是IP包。如果是ARP包, 再进行IP地址匹配检测之后决定是否回应ARP包;如果是IP包, 还要判断此IP包是否是需要的UDP包。

在本监听程序的设计当中, 网卡不主动向外发送数据, 只有当网卡接受到数据包之后, 再根据数据包的类型来决定是否回应此数据包。在回应ARP包的时候, 按照ARP包格式进行组包, 在回应UDP包的时候, 按照UDP包格式进行组包。其中要注意的是, 由于没有网络协议栈, 因此以太网头和IP包头都需要自行添加。在进行UDP的组包的时候, IP头中的header checksum域要自行计算, 如果此域填写不正确, 那么将不能正常的和宿主机进行通信。

2.2.2:宿主机数据发送程序

宿主机端的程序首先将待下载程序文件等长度分包, 然后根据通信协议与目标机进行交互。宿主机端要维护一个全局的序列号, 在发送数据包的时候, 当前序列号的值将按通信协议要求与数据打成一个UDP包发送出去。目标机端收到数据包之后, 将序列号提取出来和自身维护的序列号进行对比。如果两者相同, 则确认此包正确, 并回应宿主机, 宿主机可接着发下一包;如果两者不同, 则要求宿主机重发目标机所要求序列号的数据包。比如宿主机这时发送的是0号数据包, 如果收到包时目标机维护的全局序列号是0, 则表示此包正确, 目标机端将其维护的全局序列号加1;如果收到包时目标机维护的全局序列号不是0, 则表示此包不正确, 并组包要求宿主机发送自己序列号的数据包。

2.3:通信协议设计

为了实现宿主机和目标机在下载程序时候的通信, 我们借鉴了GAISLER公司的EDCL协议。EDCL是Ethernet Debug Communication Link的简称, 是该公司为grlib IP core所开发, 用以通过以太网来访问片上AHB总线。通过该协议能够对AHB总线上的任意地址空间进行读写操作。

EDCL协议要求的以太网包的格式[5]如图4所示:

其中4字节的Address是用来表示所要操作的内存空间, 4字节的Control world说明了宿主机和目标机在传输数据时所遵循的控制方法, 这4个字节的内容在目标机接受和发送数据时有所不同。

目标机接收数据时, Control word的内容[4]如图5所示:

其中16位的OFFSET是用来使应用层其余数据在内存中保持字对齐, R/W读写为表明了要执行的是读操作还是写操作。10位的长度位说明了要操作的数据的长度。如果R/W位为1, 则图4中的数据域就是要写的数据, 如果R/W位为0, 则数据域中的内容为空。

当目标机回应宿主机时, Contorl word的内容[4]如图6所示:

当目标机接收数据的时候, 14位的序列号将和内部维护的一个计数器进行匹配, 如果两者不匹配, 则不进行任何操作, ACK/NAK位置1, 回复包的序列号域为内部计数器的值;如果两者相匹配, 则进行相应的操作, ACK/NAK位置0, 内部计数器的值加1, 回复包的序列号域的为内部计数器更新后的值。当ACK/NAK位置1时, 长度域的内容为0。

由于我们不涉及到读操作, 我们可以将注意力集中在R/W为1的情况。并且因为我们是在软件上模拟内部计数器, 而当要传输的文件比较大时, 数据包的数量可能超过14位序列号所表能表示的范围, 因此在进行序列号和内部计数器的匹配操作的时候, 需要对内部计数器进行掩码操作, 掩码为0x00003fff。

2.4 源代码级调试流程

我们将做好的目标机网卡监听程序和目标板的初始化程序烧制在目标板的flash中, 这样目标板在启动的时候便会自动完成初始化并执行网卡监听程序, 这时候在宿主机执行数据发送程序下载待调试的程序。下载完毕之后, 就可以启动ARCDSU配合GDB进行源代码级的调试。

3、性能测试与优化

我们编写了一个helloworld程序来测试, 测试结果如图7所示:

测试结果表明, 在通过以太网下载了待调试的文件之后, 在gdb下不必执行download命令即可进行调试。

在测试过程中, 我们发现宿主机发包程序的组包长度下载速度有着较大的影响。在测试文件大小为5M的情况下, 包长512字节需时12秒, 包长256字节则需时21秒。

4、总结

本文通过实现以太网来下载待调试程序, 改进了通过串口下载程序较慢的缺点, 对缩短在arc810平台上开发嵌入式软件的周期具有重要意义。该软件不仅能下载待调试程序, 而且还能下载linux印象文件至开发板, 软件已通过测试, 在这里感谢厦门宜展科技提供的帮助。

参考文献

[1].吴志雄, 周剑扬, 卢敏.一种易于扩展的交叉调试器设计及其实现[J].电子技术, 2007/Z3

[2].LEON2 Processor User's Manual[Z].http://www.gaisler.com/, 2005

[3].ACARD 810 User's Manual[Z].2005

[4].VIA Rhine Family Fast Ethernet Controller Programming Guide[Z], 2007

如何优化书店货架管理 篇3

货架资源

货架资源的分类涉及因素主要有两个:一是货架在书店所处的区域;二是货架的空间。人眼最容易看到、人手最容易触摸到的高度是从地面算起约80~160厘米之间,这一高度是“黄金位置”。一般读者观看和拿取图书的有效范围为离地面40~180厘米之间。那么好、中、差货架的高度标准依次为80~160厘米、40~80厘米和l60~200厘米或其余部分货架。其中差货架资源的上端部分(200~225厘米)因为易于读者用手指点稍微优于最底端部分,一般情况下,货架最底端部分用作存货柜而不陈列图书。

对涉及的两个因素进行分析,可以制作出货架资源图,并定义每个货架的不同部分属于哪种货架资源,如果有必要可制作单个货架的陈列面资源图,细分货架资源,进行精细化管理。

图书类别市场占有率及市场趋势

书店货架布局时,首先考虑的是不同类别图书货架在书店中的位置,如社会科学中的文学,货架可以安排在书店布局中的黄金区域。其次,考虑子类中的优先级,比如文学中青春文学小说类别,可置于文学类别货架中的优势货架。再次,优先考虑销售高增长图书类别的货架位置,如近年来增长迅猛的旅游类图书,可以考虑置于优势货架或者设立单独的货架。

图书因素

考虑了不同类别图书货架在书店中的位置之后,需要考虑每个分类货架(单个货架)上具体图书的位置资源分配。另一个决定图书影响力的重要因素是图书的品牌效应,即出版社品牌、图书产品项目品牌、图书品种品牌和作者品牌。

摆放册数

图书商品有其特殊性,图书开本规格有严格的标准,对除辞典、大型工具书外的大多数图书而言,厚薄有别,单本所占货架资源差别不大,因而资源分配主要体现在陈列册数上。陈列过少,需要频繁补货,影响效率,人力成本增加;陈列过多,则浪费资源,影响其他图书陈列。书店可定期对每种图书销售数据进行量化分析,确定最优陈列册数,创造最大的货架效率。

人性化因素

读者群年龄、性别的差异导致读者行为方式的差别。一般来说,像儿童、少年类图书的货架可以选择单层低货架,方便儿童、少年读者翻阅、查找,货架颜色也可以有更多选择;女性图书专柜书架可略低于一般书架。对于一般书架,可像很多图书馆一样,每隔一定距离放置一个安全便捷的踏梯,方便读者取书。在儿童图书的书架旁边还可以附设幼教类书架,甚至妇女保健、烹饪等家居类图书书架,因为家长在带孩子逛书店时一般不会让孩子离开自己的视线。这种精心设计的关联性图书陈列将会节约顾客的时间,增强购买的便利性,从而带动图书的销售。

书店管理系统源代码 篇4

import java.util.List;import java.util.Scanner;

import cn.pab.dao.PersonDao;import cn.pab.dao.TypeDao;import cn.pab.dao.UserDao;import cn.pab.dao.impl.PersonDaoImpl;import cn.pab.dao.impl.TypeDaoImpl;import cn.pab.dao.impl.UserDaoImpl;import cn.pab.entity.Person;import cn.pab.entity.Type;/** * 业务类

*/ public class PABmanager { /**

* 系统启动

*/ public static void main(String[] args){

Scanner input = new Scanner(System.in);

UserDao userDao = new UserDaoImpl();

TypeDao typeDao = new TypeDaoImpl();

PersonDao personDao = new PersonDaoImpl();

System.out.println(“***********欢迎使用个人通讯录管理系统**********”);

System.out.print(“n请选择操作(1.系统登录

2.密码修改

3.取消):”);

String in = input.next();

if(“1”.equals(in)){

boolean islogin = userDao.login();

if(islogin){

System.out.println(“***********成功登录个人通讯录管理系统**********”);

//System.out.print(“n请选择操作(1.类别管理

2.联系人管理

3.退出系统):”);

}else{

System.out.println(“用户名或密码错误,不能登录!”);

System.exit(-1);

}

}else if(“2”.equals(in)){

boolean modiFlag = userDao.modify();

if(modiFlag){

System.out.println(“密码修改成功!”);}else{

System.out.println(“密码修改失败!”);} System.exit(-1);}else{ System.out.println(“您已经退出系统!”);System.exit(-1);}

while(true){

System.out.print(“n请选择操作(1.类别管理

2.联系人管理

3.退出系统):”);String in2 = input.next();if(“1”.equals(in2)){ while(true){

System.out.print(“n请继续选择操作(1.新建类别

2.查询类别

3.删除类别

4.返回):”);

String num = input.next();

if(“1”.equals(num)){

System.out.print(“请输入类别的名称:”);String lbmc = input.next();

System.out.print(“请输入类别的说明:”);String lbsm = input.next();System.out.print(“请输入类别的备注:”);String lbbz = input.next();

Type type = new Type(lbmc,lbsm,lbbz);

typeDao.createType(type);}else if(“2”.equals(num)){ List types = typeDao.queryType();

System.out.println(“tt类别信息列表”);

System.out.println(“类别名称tt类别说明tt类别备注”);

for(int i = 0;i < types.size();i++){

Type type =types.get(i);

System.out.print(type.getLbmc()+“t”);

System.out.print(type.getLbsm()+ “tt”);

System.out.println(type.getLbbz());

}

}else if(“3”.equals(num)){

System.out.print(“请输入类别的名称:”);

String lbmc = input.next();

Type type = new Type(lbmc,null,null);

typeDao.deleteType(type);}else if(“4”.equals(num)){ break;}else{

System.out.println(“您输入不合法,请重新选择!”);

}

} }else if(“2”.equals(in2)){

while(true){

System.out.print(“n请继续选择操作(1.新建联系人

2.查询联系人

3.更新联系人

4.删除联系人

5.返回):”);

String num = input.next();

if(“1”.equals(num)){

System.out.print(“请输入联系人的类别名称:”);String lb = input.next();

System.out.print(“请输入联系人的姓名:”);String xm = input.next();

System.out.print(“请输入联系人的电话:”);String dh = input.next();

System.out.print(“请输入联系人的手机号:”);String sjh = input.next();

System.out.print(“请输入联系人的工作单位:”);String gzdw = input.next();

System.out.print(“请输入联系人的住址:”);

String zz = input.next();

System.out.print(“请输入联系人的邮政编码:”);

String yzbm = input.next();

Person person = new Person(lb,xm,dh,sjh,gzdw,zz,yzbm);

personDao.createPerson(person);

}else if(“2”.equals(num)){

System.out.print(“请输入联系人的姓名:”);

String name = input.next();

Person p = personDao.queryPerson(name);

System.out.println(“tt查询到的联系人信息”);

System.out.println(“类别t姓名t电话tt手机号tt工作单位t住址t邮政编码”);

System.out.print(p.getLb()+ “t”);

System.out.print(p.getXm()+ “t”);

System.out.print(p.getDh()+ “t”);

System.out.print(p.getSjh()+ “t”);

System.out.print(p.getGzdw()+ “t”);

System.out.print(p.getZz()+ “t”);

System.out.println(p.getYzbm());

}

} }

}else if(“3”.equals(num)){

System.out.print(“请输入需更新的联系人编号:”);

int id = input.nextInt();

System.out.print(“请输入需更新的联系人信息选项:”);

String item = input.next();

System.out.print(“请输入联系人信息选项的值:”);

String val = input.next();

personDao.updatePerson(id,item, val);

}else if(“4”.equals(num)){

System.out.print(“请输入要删除联系人的姓名:”);

String name = input.next();

personDao.deletePerson(name);

}else if(“5”.equals(num)){

break;

}else{

System.out.println(“您输入不合法,请重新选择!”);

书店管理系统源代码 篇5

Linux内核源码是很具吸引力的,特别是当你弄懂了一个分析了好久都没搞懂的问题;或者是被你修改过了的内核,顺利通过编译,一切运行正常的时候。那种成就感真是油然而生!而且,对内核的分析,除了出自对技术的狂热追求之外,这种令人生畏的劳动所带来的回报也是非常令人着迷的,这也正是它拥有众多追随者的主要原因:

首先,你可以从中学到很多的计算机的底层知识,如后面将讲到的系统的引导和硬件提供的中断机制等;其它,象虚拟存储的实现机制,多任务机制,系统保护机制等等,这些都是非都源码不能体会的。

同时,你还将从操作系统的整体结构中,体会整体设计在软件设计中的份量和作用,以及一些宏观设计的方法和技巧:Linux的内核为上层应用提供一个与具体硬件不相关的平台;同时在内核内部,它又把代码分为与体系结构和硬件相关的部分,和可移植的部分;再例如,Linux虽然不是微内核的,但他把大部分的设备驱动处理成相对独立的内核模块,这样减小了内核运行的开销,增强了内核代码的模块独立性。

而且你还能从对内核源码的分析中,体会到它在解决某个具体细节问题时,方法的巧妙:如后面将分析到了的Linux通过Botoom_half机制来加快系统对中断的处理。

最重要的是:在源码的分析过程中,你将会被一点一点地、潜移默化地专业化。一个专业的程序员,总是把代码的清晰性,兼容性,可移植性放在很重要的位置。他们总是通过定义大量的宏,来增强代码的清晰度和可读性,而又不增加编译后的代码长度和代码的运行效率;他们总是在编码的同时,就考虑到了以后的代码维护和升级。甚至,只要分析百分之一的代码后,你就会深刻地体会到,什么样的代码才是一个专业的程序员写的,什么样的代码是一个业余爱好者写的。而这一点是任何没有真正分析过标准代码的人都无法体会到的。

然而,由于内核代码的冗长,和内核体系结构的庞杂,所以分析内核也是一个很艰难,很需要毅力的事;在缺乏指导和交流的情况下,尤其如此。只有方法正确,才能事半功倍。正是基于这种考虑,作者希望通过此文能给大家一些借鉴和启迪。

由于本人所进行的分析都是基于2.2.5版本的内核;所以,如果没有特别说明,以下分析都是基于i386单处理器的2.2.5版本的Linux内核。所有源文件均是相对于目录/usr/src/linux的。

要分析Linux内核源码,首先必须找到各个模块的位置,也即要弄懂源码的文件组织形式。虽然对于有经验的高手而言,这个不是很难;但对于很多初级的Linux爱好者,和那些对源码分析很有兴趣但接触不多的人来说,这还是很有必要的。

1、Linux核心源程序通常都安装在/usr/src/linux下,而且它有一个非常简单的编号约定:任何偶数的核心(的二个数为偶数,例如2.0.30)都是一个稳定地发行的核心,而任何奇数的核心(例如2.1.42)都是一个开发中的核心。

2、核心源程序的文件按树形结构进行组织,在源程序树的最上层,即目录/usr/src/linux下有这样一些目录和文件。

◆COPYING:GPL版权申明。对具有GPL版权的源代码改动而形成的程序,或使用GPL工具产生的程序,具有使用GPL发表的义务,如公开源代码。

◆CREDITS:光荣榜,

对Linux做出过很大贡献的一些人的信息。

◆MAINTAINERS:维护人员列表,对当前版本的内核各部分都有谁负责。

◆Makefile:第一个Makefile文件。用来组织内核的各模块,记录了个模块间的相互这间的联系和依托关系,编译时使用;仔细阅读各子目录下的Makefile文件对弄清各个文件这间的联系和依托关系很有帮助。

◆ReadMe:核心及其编译配置方法简单介绍。

◆Rules.make:各种Makefilemake所使用的一些共同规则。

◆REPORTING-BUGS:有关报告Bug的一些内容。

●Arch/:arch子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体系结构,例如i386就是关于intelcpu及与之相兼容体系结构的子目录。PC机一般都基于此目录;

●Include/:include子目录包括编译核心所需要的大部分头文件。与平台无关的头文件在include/linux子目录下,与 intelcpu相关的头文件在include/asm-i386子目录下,而include/scsi目录则是有关scsi设备的头文件目录。

●Init/:这个目录包含核心的初始化代码(注:不是系统的引导代码),包含两个文件main.c和Version.c,这是研究核心如何工作的好的起点之一。

●Mm/:这个目录包括所有独立于cpu体系结构的内存管理代码,如页式存储管理内存的分配和释放等;而和体系结构相关的内存管理代码则位于arch/*/mm/,例如arch/i386/mm/Fault.c。

●Kernel/:主要的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c;同样,和体系结构相关的代码在arch/*/kernel中。

●Drivers/:放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目录:如,/block下为块设备驱动程序,比如ide (ide.c)。如果你希望查看所有可能包含文件系统的设备是如何初始化的,你可以看drivers/block/genhd.c中的 device_setup()。它不仅初始化硬盘,也初始化网络,因为安装nfs文件系统的时候需要网络。

●Documentation/:文档目录,没有内核代码,只是一套有用的文档,可惜都是English的,看看应该有用的哦。

●Fs/:所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,例如fat和ext2。

●Ipc/:这个目录包含核心的进程间通讯的代码。

●Lib/:放置核心的库代码。

●Net/:核心与网络相关的代码。

●Modules/:模块文件目录,是个空目录,用于存放编译时产生的模块目标文件。

●Scripts/:描述文件,脚本,用于对核心的配置。

一般,在每个子目录下,都有一个Makefile和一个Readme文件,仔细阅读这两个文件,对内核源码的理解很有用。

书店管理系统需求分析报告 篇6

目录

1.引言.................................错误!未定义书签。1.1编写需求分析规格说明书的目的........................4 1.2软件设计目标........................................4 1.3 术语表.............................................4 1.4参考资料............................................4 2.软件产品的一般性描述...................................5 2.1运行环境............................................5 2.2软件产品的功能(用例模型)..........................5 2.3用户特征............................................7 2.4限制与约束..........................................7 3.系统功能行为分析......................................7 3.1引言................................................7 3.2 系统功能模型——系统用例模型........................7 3.3相关用例的展开——活动图...........................10 3.4系统静态模型——对象类模型.........................12 3.5系统动态模型(顺序图).............................14 3.6系统体系结构模型...................................18 3.7输出结果...........................................19 4.系统性能分析.........................................20 4.1数据精准度.........................................20

4.2时间特性...........................................20 4.3适应性.............................................20 4.4故障处理...........................................20 5.系统运行要求分析.....................................20 5.1用户界面...........................................20 5.2硬件接口...........................................20 5.3软件接口...........................................20 6.其他要求............................................20 7.附录.................................错误!未定义书签。

1.引言

1.1编写需求分析规格说明书的目的

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。传统的书店管理系统其日常管理工作都是人工操作,存在着许多缺点,如:效率低下、保密性差,另外时间一长,将产生大量的文件和数据,这对于数据的查找、更新和维护都带来了不少的困难,并且浪费了许多人力和物力。在信息时代,使用计算机对图书信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高书店管理的效率。因此,开发这样一套书店管理软件成为很有必要的事情。

1.2软件设计目标

(1)登录系统:管理员和顾客进入登陆界面,输入各自的的用户名和密码进入登陆界面,可以通过登录该系统进行各项功能的操作

(2)书籍管理:管理员进入书籍管理界面,对书籍基本信息制定、输入、修改、查询,包括书籍编号、类别、关键词、备注。

(3)书籍出售:管理员进入书籍出售管理界面,根据ISBN号出售图书,删去相应库存,记录销售时间,包括预订书籍、查询书籍的处理。

(4)顾客管理:管理员进入顾客管理界面,进行对顾客的一系列操作,包含对顾客信息的增删改等操作,以及会员服务等。

(5)查询书籍:管理员和顾客登录系统,进入书籍查询界面,对图书的一些详细信息进行查询。

(6)预定书籍:顾客登录系统,进入书籍预定界面,通过对图书信息查询,对已选择的图书进行预定。

(7)购买书籍:顾客登录系统,进入购买图书界面,对已选择的图书进行购买。

(8)系统应符合书店管理的规定,满足书店相关人员日常使用的需要,并达到操作过程中的直观、方便、实用安全等要求;

(9)系统采用模块化程序设计方法,即便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护;(10)系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、备份等操作;

(11)尽量采用现有软硬软硬件环境及先进的管理系统开发方案,从而达到充分利用现在有资源,提高系统开发水平和应用效果的目的。

1.3 术语表

[1].登录:包括书店管理员、顾客在书店登陆界面输入各自用户名和密码,如 果输入正确就可以直接进入书店系统,管理员可以对系统进行相应的操作;而顾客也可以进行相应的操作。

[2].书籍管理:是指管理员对书籍进行一个比较系统的管理,如对图书信息进行录入、删除、浏览、查询、修改等基本操作 [3].书籍出售:是指管理员对书籍的出售情况进行管理,及时处理顾客的订单,完成书籍出售的过程。

[4].顾客管理:是指管理员对顾客的管理,包括对会员的管理,对会员信息进行维护,及时的增加、修改、删除等来完善对会员的管理;也包括对其他顾客的信息管理。是指

[5].购买书籍:是指顾客对已选择的图书进行购买的过程。

[6].查询:是指管理员查询图书的库存,出售情况,以及缺货补充等的查询;顾客对图书种类,价格等的查询。[7].预定书籍:是指顾客再经过对图书的查询,选择需要的图书并对图书进行预定,方便购买。

1.4参考资料

[1] 黄梯云 《管理信息系统》 经济科学出版社 2000.3 [2]甘仞初《信息系统开发》经济科学出版社 1996.9 [3]汪星明 《管理系统中计算机应用》武汉大学出版社 1997.5 [4] 方美琪,软件开发工具[M],经济科学出版社

[5] 陈禹,方美琪,软件开发工具[M],经济科学出版社

2.软件产品的一般性描述

2.1运行环境

硬件环境:

512M以上内存

软件环境:

数据库Microsoft SQL Server 2005及以上版本 Windows XP,Win7 CP/IP 通信协议

2.2软件产品的功能(用例模型)

图1 功能用例 “系统登录”用例

1.管理员和顾客进入登陆界面 2.填写各自用户名及密码 3.系统进行账户的核实 4.成功登陆

5.管理员可以进行顾客管理、图书管理、售书管理、书籍查询等。6.顾客可以进行书记的查询、预定、购买等。

“顾客管理”用例

1.管理员登陆顾客管理界面 2.系统响应相应的用户权限 3.列出相应的信息 4.用户选择相应的操作 “购买书籍”用例

1.管理员进入登陆界面 2.系统响应相应的用户权限 3.列出相应的信息 4.用户操作 “图书管理”用例

1.登陆图书信息管理界面

2.系统响应相应的用户权限操作

3.图书信息进行录入、删除、浏览、查询、修改等基本操作 4.列出相应的信息

5.用户选择相应的操作

“预定书籍”用例

1.管理员进入登陆界面

2.系统响应相应的用户权限,对订单信息进行管理或处理

3.列出相应的信息

4.接收订单并发货、拒绝订单、查询库存、订购货品、订单增加 5.用户操作 “售书管理”用例

1.管理员进入登陆界面 2.系统响应相应的用户权限 3.列出相应的信息 4.用户操作 “査书管理”用例 1.陆查询界面

2.系统响应相应的用户权限 3.列出相应的信息

4.管理员对图书销售及相关信息的情况查询

5.顾客(会员和游客)对图书的相关信息的查询

6.用户选择相应的操作进行查询

2.3用户特征

该软件适用于掌握计算机基础知识的客户,书店员工可根据自己的权限进行相应操作,系统管理员要求由计算机的专业知识。

2.4限制与约束

1.建议开发软件运行的最短寿命:3年 2.进行系统方案选择比较的期限:3个月 3.经费来源和使用限制:新华书店

4.硬件、软件、运行环境和开发环境的条件和限制:新华书店拥有大型机以及用来支持的数据库,安装有Windowsxp及以上的操作系统。

5.建议开发软件投入使用的最迟时间:开发完成后试运行1个月。

3.系统功能行为分析

3.1引言

第一步创建系统的用例模型。作为描述系统的用户或参与者所能操作的模型,它在需求分析阶段有着重要的作用,整个开发过程都围绕系统的需求用例表述的问题和问题模型进行。

3.2 系统功能模型——系统用例模型

创建系统用例的第一步是确定系统的参与者。

书店管理系统的参与者包含以下三种:

管理员: 进入管理页面,可以维护客户注册信息、维护图书信息、处理订单信息、报表维护(报表输出、报表备份、报表恢复、报表删除)、商品销售查询。

员工: 进入工作管理页面,可以对图书(或商品)信息进行录入、删除、浏览、查询、修改(商品销售)、维护个人信息、维护订单信息(接收订单并发货、拒绝订单、查询库存)。

顾客:(会员和游客)会员:进入登入页面,可以对图书信息进行查询、,并可以维护个人信息,维护订单信息(订单状态查询、订单删除或增加); 游客: 进入网站后,只能进行基本的信息浏览和查询。

图2 系统参与者

1.用户用例(会员和普通用户)

(1)登录:会员通过身份验证,登录到网上书店系统。

(2)注册:普通用户在网上书店系统注册个人信息,可以成为会员。(3)浏览图书:会员或游客可以浏览网上书店的图书。

(4)查询个人资料: 会员可以查询修改个人资料,包括个人的基本信息、订单信息。

(5)修改个人资料:会员可以修改个人信息。

(6)加入购物车:会员可以将要买的书籍添加到购物车,可以对购物车里 书籍数量信息进行修改。

(7)提交订单:会员可以对所下订单进行提交。(8)付款:会员可以进入付款界面进行结算。2.员工用例

(1)登录:员工根据用户名和密码,登录到网上书店系统。(2)销售查询:员工可以对书店的销售情况进行查询。(3)库存查询:员工可以对书店所剩下的书籍进行查询。(4)图书管理:员工可以修改书籍信息、添加图书、删除图书。(5)订单处理:员工可以修改订单信息、删除订单。

3.管理员用例

(1)登录:管理员输入账号和密码可以登录带网上书店系统(2)管理会员:管理员可以修改会员信息、添加、删除会员。(3)员工信息维护:管理员可以修改员工信息、添加、删除员工。

在识别出参与者和用例后,要想建立用例图,还需要识别出他们之间的关系。“加入购物车”、“添加书籍到购物车”、“查看个人资料

”、“ 提交订单”等,这些动作是由“会员”执行的。为了购物安全方便,系统还需要提供用户信息验证,确保只有会员用户才可以进行书籍购买。用例“管理书籍”、“ 管理订单” 这些动作是由“员工”执行的。用例“维护员工信息”“维护系统”等,这些动作是由“管理员”执行的。为了系统的安全性,系统还需要提供进行身份验证的功能,以确保只有具有权限的“系统管理员”才可以使用系统的功能,所以“管理员”必须与用例“登录”交互,也即“管理员”在使用系统前,要使用用户名和密码进行登录,系统验证用户的密码正确后,用户才可以执行进一步的操作。

图3 会员用例图

图4

管理员用例图

图5

员工用例图

3.3相关用例的展开——活动图

(1)员工订单处理活动图

员工可以对用户提交的订单进行处理,员工在系统中,先对系统发出订单处理请求,系统转到订单管理界面,如果要删除订单,选择要删除的订单,系统将修改的信息保存到数据库中。如果需要删除订单,订单处于待修改状态,体统将 10

修改后的信息保存到数据库中。

图6 员工订单处理活动图

(2)员工图书管理活动图

图7

员工图书管理活动图

(3)顾客购买商品和管理员处理订单的活动图如图8所示。

图8

顾客购买商品和管理员处理订单的活动图

从图8中可以看出,管理员、顾客发生了相互的关系。顾客登录后查询商品,在选择了自己希望购买的商品后提交订单,接下来顾客处于查询订单的循环状态。与此同时,管理员接收到了顾客提交的订单,并根据该订单对应商品的库存情况判断是否拒绝该订单,并更新客户订单。在顾客查询到订单状态变成已处理后,购买过程结束。

3.4系统静态模型——对象类模型 进一步分析系统需求,发现类以及类之间的关系,确定它们的静态结构和动态行为,是面向对象[7]分析的基本任务。系统的静态结构模型主要用类图和对象图描述。

进一步分析系统,发现类以及类之间的关系,确定它们的静态结构,是面向对象分析的基本任务。系统的静态结构模型主要用类图和对象图来实现的。类图从抽象的角度描述系统的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类之间的相互关系。其中类的识别分为三类:识别实体类、识别边界类和识别控制类。

类不是孤立的,UML为我们定义了它们之间的四种关系,它们是:关联(Association)关系(聚合和组合)、依赖(Dependency)关系、泛化(Generalization)关系、实现(Realization)关系。

关联关系是类之间最广泛的关系,若两个类的对象的实例之间具有某种(属

性上的)依赖关系,对象所属类间的关系称为关联关系,关联关系是一种结构关系,是一种弱关系,被关联的元素间通常可以被独立的考虑。指出了一个事物的对象与另一个事物的对象之间的语义上的连接。其表示方法是在UML中,关联的图形表示是实线+箭头,箭头指向被关联的类。关联可以是单向的,也可以是双向的。关联关系包含两种:聚合关系和组合关系。其中聚合关系是类与类之间的关系具有“整体——部分”的特点。其表示方式:在UML中聚合的图示方式为,在表示关联关系的直线末端加一个空心的小菱形,空心菱形紧挨着具有整体性质的类,即箭头指向整体类。组合关系是整体和部分是不可分的,整体的生命周期结束时也就是部分的生命周期到头时。

依赖关系是对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。用虚箭头表示。

泛化关系表示一个泛化的元素和一个具体的元素之间的关系。它又称继承,UML中的泛化是通用元素和具体元素之间的一种分类关系。具体元素完全拥有通用元素的信息,并且还可附加一些其它信息。泛化可用于类、用例等各种模型元素。父类与子类的泛化关系图示为一个带空心三角形的直线,空心三角形紧挨着父类。

实现关系是指定两个实体之间的一个合同。实现是规格说明和其实现之间的关系,它将一种模型元素与另一种元素连接起来。在UML中,实现关系的符号与泛化关系的符号类似,用一条带指向接口的空心三角箭头的虚线表示。

根据上述类的关系,完整的类图如图9所示

图9

类图

3.5系统动态模型(顺序图)

系统的动态模型可以使用交互作用图、状态图和活动图来描述。交互作用图包括序列图和协作图。序列图描绘了系统中的一组对象在时间上交互的整体行为,协作图描绘的是系统中一组对象的交互行为。创建顺序图:

(1)顾客订购顺序图如图10所示。

用户首先使用自己的账号和密码登录系统,登录模块会将客户的ID保存在系统缓存中并提交给商品查询模块。商品查询模块提示客户输入查询条件,客户输入适当的查询条件后查询模块显示符合查询条件的商品列表。客户得到商品列表后,提交自己想要购买的商品ID。订购模块得到商品ID,生成订单并提交给数据模块进行保存。保存成功后,订购模块提示用户订购该商品成功。

图10 顾客订购顺序图

(2)顾客删除订单顺序图如图11所示。

客户在提交订单后可以对订单进行维护(添加、删除、修改)。客户首先输入自己的账号和密码登录系统。登录模块会将客户的ID保存在系统缓存中并提 14

交给订单查询模块。订单查询模块显示该客户当前的所有订单,客户得到该列表后,选择需要删除的商品ID,订单处理模块把删除信息提交给数据模块,数据模块保存信息。订单处理模块提示用户删除操作成功。

图11 顾客删除订单顺序图

(3)管理员处理订单顺序图如图12所示。

管理员使用其账号和密码登录后,登录模块会将管理员的ID保存在系统缓存中并提交给订单处理模块。订单处理模块提交给管理员未处理订单的列表,管理员提交某商品ID得到该商品的库存情况。如果库存充足则接受订单,并把接受信息提交给数据模块,数据模块更新该客户的订单信息并返回成功信息给订单处理模块,订单处理模块提示管理员该操作成功。

图12 管理员处理订单顺序图

(4).管理员登录顺序图

管理员登陆的过程为:管理员进入系统,进入登录页面,输入账号密码,系统验证身份信息,验证成功,界面返回成功信息,管理员接受成功消息,登陆系统成功。如图11。

图13

管理员登录顺序图

(5)会员提交订单顺序图

会员登录系统,进入提交订单界面,将确认的订单提交到系统中,如果订单无误则显示成功提交订单,并返回提交订单界面,如果订单有误,则显示是错误

订单,会员在进行订单的修改确认。

图14 会员提交订单顺序图

(7)员工管理图书顺序图

员工进入图书信息管理界面,可以进行图书的检查、修改、删除、增加等操作。进入修改删除图书界面,并输入要修改的图书信息,以及要增加的图书信息,如果增加图书信息成功则返回信息成功修改添加界面,并显示修改成功,返回界面,如果有误在进行进一步的修改。

图15

员工管理图书顺序图

3.6系统体系结构模型

我们可以识别系统中存在的主要实体类:书店、员工、用户。

图16

书店管理系统的主要参与者

(1)主界面

系统的主界面具有菜单和菜单项,当选择不同的菜单项时,用户可以执行不同的操作。当程序退出时,主界面窗口关闭。

(2)图书信息显示界面

图书信息显示界面是进行书籍查询时所需要的对话框。用户根据书籍名、作者、类别等条件查询书籍,系统查询数据库获取符合条件的书籍并显示到界面。

(3)注册界面

注册界面是进行游客注册时所需要的对话框。当选择主窗口中的菜单项“注册”时,对话框弹出,游客填写用户名、密码、电话、家庭住址、邮编等信息,然后点击“提交”按钮,系统创建用户的信息并将之存储到数据库中。并且系统将自动登录到系统主页。

(4)购物车界面

购物车界面是进行操作“删除购物车里的书籍”、“修改购物车里书籍数量”或“提交订单”时所需要的对话框。

当用户选择删除购物车里的书籍时,对话框弹出,用户点击“删除按钮”,系统删除用户购物车里的该书籍。当用户选择修改购物车里书籍数量时,用户输入书籍的数量,然后点击“更新”按钮,系统更新用户购物车里的该书籍数量。当用户选择“提交订单”时,系统进入付款界面,并且系统将此购物产生一个订单保存到数据库中。

(5)图书管理界面

图书管理界面是进行操作“添加书籍”、“编辑书籍”或“删除书籍”时所需的对话框。

当选择主窗口中的菜单项“添加书籍”时,对话框弹出,员工输入书籍信息,然后单击按钮“添加”,系统创建书籍的信息并将之存储在系统中。当选择菜单项“编辑书籍”或“删除书籍”时,对话框弹出,员工输入要编辑或删除的书籍的名称,单击按钮“OK”提交。系统查询数据库检索到书籍信息后弹出对话框BookDialog,显示书籍的详细信息,如若是“编辑书籍”,员工编辑修改书籍的有关信息,然后单击按钮“更新”,更新系统中存储的书籍信息;如若是“删除书籍”,员工则单击按钮“删除”,系统删除所存储的该书籍信息,当然,与该书

籍有关的其他信息业也一并删除。

(6)登陆界面

登陆界面是用户用来登陆的界面。用户输入用户名和密码,点击按钮“登陆”,系统查询数据库检索此用户的用户名和密码是否正确,若正确,若是admin用户,系统将显示后台管理界面,否则系统将显示首页面。若错误,系统提示“用户名或密码错误。”

根据上述部分界面的分析,网上书店系统中的边界类图

图17 边界类图

图18

控制类图

3.7输出结果

4.系统性能分析

4.1数据精准度

在向数据库文件提取数据时,要求数据记录定位准确,在往数据库文件数组中添加数据时,要求输入数据准确。金额,身份证,卡号等按需求设定字符数。

4.2时间特性

程序响应时间:在人的感觉和视觉事件范围内;

信息交换时间:要求在程序调用前、调用后都与数据库保持同步更新,网络信息交换时间应该小于程序调用的时间。

4.3适应性

要求数据库具有很好的更新能力,由于本产品是实验性软件,故对磁盘和内存容量没有很高的要求,但是数据库应该能够对并发事件、脏数据具有较强的识别处理能力。

4.4故障处理

软件应具备自动拼写错误检查等功能,在出现故障后应从整个系统数据库重新载入数据进行操作。

5.系统运行要求分析

5.1用户界面

屏幕格式:采用全屏格式,通过分窗口操作进行各个操作之间的转换 报表格式:以银行原报表格式设计电子打印表格式。

菜单格式:下拉式菜单,应显示储户资料及帐户资料的各个详细条目。

5.2硬件接口

网络硬件接口要求:现实中要求具有高速以太网组网以实现联网操作,但是从理论实验验证软件本身的目的来看,无需网络通讯接口。业务员键入储户的资料要全部一直显示在屏幕;储户从按键口键入密码到系统以核对;计算机与打印机有高速传输的连接接口,最后以纸张的形式打印出清单给储户。

5.3软件接口

Windows标准接口,要求与其他软件无冲突错误发生。

6.其他要求

安全保密性、复用性、灵活性、易用性、可维护性、可移植性等。指明不同属性的相对侧重点,例如易用程度优于易学程度,或者可移植优于有效性。(1)健壮性:说明软件在容错能力,故障处理能力上需要达到的目标,保证系统稳定可靠;

(2)安全保密性:包括用户身份确认或授权方面的需求,保密性策略,产品所创建或使用的数据的保护等等;

(3)安全性:通过网络传送的数据需要简单加密,服务器端对接收到的数据需要二次简单验证。

(4)复用性:说明本项目是否可以复用已有软件、是否可为其它产品复用;(5)灵活性:说明在运行环境、与其他软件的接口以及开发计划等发生变化时,应具有的适应能力。

基于ASP的网上书店系统 篇7

1 需求分析

1.1 系统架构,系统模块设计

图1为系统的网络应用原理示意图。

系统使用者包括非注册用户与注册用户两大类,其中注册用户又包括普通用户与系统管理员两小类。不同类别的用户使用系统的权限也不同。

图2为前台和后台管理系统以及各个子系统之间的功能结构图。

1.2 功能需求分析

1)图书浏览检索功能

系统提供给客户按照书名、作者、出版社、售价范围的组合查询方式以及按照每一个网页显示的数量、书名排序、作者排序等多种排序规则显示查询结果。

2)会员访问管理功能

在网上书店前台销售管理系统部分,只有会员才能购买图书,销售优惠打折。客户必须先注册成为会员,然后登陆,确认了合法身份后,才能在网上购物。

3)购物车功能

网上购物车是网上书店前台销售管理的核心,在客户购物的整个过程中,购物车结合了商品浏览检索、会员注册登录,最终生成客户的网上订单。网上购物车提供的主要功能有:

(1)新建购物车:网上购物的每一个客户都有属于自己的购物车,客户购买商品时,系统为每一个客户的购物车创建购物车号

(2)添加物品:客户从网站购买商品时,可以点击商品的图片或名称进行购买,购物车会自动添加商品的名称,价格等信息。

(3)删除物品:客户通过购物车,可以随时删除在购物车内每一种商品的名称、数量、价格等信息。

(4)清空购物车:客户如果放弃购物,可以清空购物车内所有的商品信息。

(5)显示购物车:设计美观大方的购物车界面,提供友好的操作方式,以便于来自Internet上的所有客户使用。

(6)会员资格确认后,客户需要填写网上订单所需要的基本信息,然后客户正式提交订单,应用程序将购物车提供的商品名称、价格、数量等信息保存到数据库中。

4)图书管理功能

完成图书信息的录入、修改、删除和多种方式的查询:图书封面图片的上传及图书销售量统计,还有完成后台对客户的预定图书处理。

5)订单管理功能

合理设计订单状态:后台管理系统处理网上的客户订单,根据业务的实际需求,订单状态有多种,例如客户填写的订单格式正确,则订单的状态为有效,反之订单的状态为无效,后台管理员没有审核客户填写的订单信息内容是否正确时,订单状态为未审核等等。

查询订单信息:按照订单编号的方式、订单日期的方式、未审核订单状态等方式查询订单信息。

订单处理:主要是编辑订单的状态,通过订单的状态可以使后台管理员有效的管理图书流通过程中的各个环节,同时也可在Internet上清楚的向客户显示所购图书在流通过程中的状态。在编辑订单状态时要注意与库存的一致性。

删除无效订单:客户填写的订单信息不正确时(客户地址不明),后台管理审核订单的状态为无效,经过一星期后,应用程序就可删除订单信息;又如客户选择邮局汇款的方式,但两个星期内并未支付,那么后台管理员将订单的状态修改为支付不成功取消,再经过两个星期后,应用程序就可从数据库中删除订单信息。

6)客户管理功能

客户管理是后台管理不可分割的一部分,它可以为管理人员提供一些重要的操作,管理人员可以通过客户管理来审核那些已经注册的客户,判断他们是否为合法用户后再进行相应的操作(删除,修改);还可以通过客户管理来查找符合某些条件的客户,来达到管理人员如期的目的。

2 数据库介绍

本系统设计中设计的数据库表结构如图3-图8所示。

3 开发环境介绍

ASP技术的主要用途是制作动态的,交互的,高性能的Web应用程序,以前Web应用程序都是由(CGI公共网关界面来实现的),但由于CGI本身的一些缺点和限制(如较消耗用户系统资源,执行效率差等),人们都在寻找各种各样的替换方案,在这种情况下,Microsoft的ASP应运而生,再加上与Microsoft的IIS(Web服务器)和MTS(组件事务管理服务器)的组合,ASP已经成为Web应用程序开发的主要技术。

4 程序主界面

图10为网上书店系统后台界面。

4.1 页面公共部分设计

本系统的前台销售管理系统实现的功能类似于现实生活中的商店销售,顾客可以浏览商品、浏览商品、结账完成购物等。在设计网站时,应根据所销售商品的特点安排布局,在编制程序时应充分考虑这一点,商品数据应根据需要能灵活的从数据库中挑出,照顾客浏览习惯,简化购物流程,真正做到“简洁、高效、流畅”的购物环境。在支付方面,根据实际情况,采用“货到付款”和“银行汇款”的方式。本系统设计的网上购物过程为,当客户通过Internet访问书店的网站时,如果他要购买商品,那么必须先注册成为会员,然后再进行会员登陆(确认身份),然后才可以把商品放入“购物车”,通过购物车完成会员的购物后,会员进行结账,生成网上订单。

本系统的后台管理系统融入了企业传统的进销存概念,对图书进行分类管理,提供图书信息管理的添加,修改和删除的功能,支持图书的封面图片上载工作,从而增强了图书商品的宣传效果。对订单的管理是后台管理系统中关键的部分,根据自身要求,采用订单状态来标识图书的各个流通环节,在编程设计时,要充分考虑订单管理与图书管理的密切联系,保证订单状态与库存的一致性。对于后台的客户管理规则要提供便捷的查询方式,提供合理的管理操作。

4.2 每个页面上的操作权限设计

用户登录成功后获取其相应的操作权限,然后通过Session传递到每个页面,每个页面接收到操作权限(字符串)后分析并控制相应按钮与界面(如添加、修改、删除等)。每个功能模块必须具有浏览、添加、修改、删除、综合查询功能,而导入、导出、统计汇总、锁管理功能应该根据具体模块而定。

5 结束语

本系统就是电子商务在在线出售方面的应用,系统已经拥有一定的使用性,能够满足一些客户的要求,但是在许多地方还需要很好的完善,我将在以后的时间里加以实现。

摘要:该文设计提出了课题所涉及的相关技术:多层用户/服务器结构以及Web应用的相关数据库访问技术,ASP技术。在此基础上论述了网上书店系统的设计目标、系统需求和总体设计方案,较详细的论述了网上书店系统的详细设计和实现。

关键词:购物车,网上书店系统,B/S结构,ASP

参考文献

[1]Richard Anderson Chris Blexrud.ASP3高级编程[M].刘富太,张立民,译.北京:机械工业出版社,2003.

[2]张海藩.软件工程导论[M].北京:清华大学出版社,1998.

书店管理系统源代码 篇8

1.加快建立现代企业制度,是新华书店鹤立市场的关键

1.1传统的企业制度不适应市场竞争的要求

我国传统企业制度的典型特征就是管得过多、统得过死、企业没有自主权。这种特征在新华书店主要表现在三个方面:

一方面,管得过、统得过死,企业不能成为真正的市场主体。不仅省级店本身的人、财、物、决策、经营、管理是集中统一的,而且省级店对下层地市、县店也是实行统一的集权管理。地市、县店既无经营权,也无管理权,更无发展权。

另一方面,权责不一致。进入上世纪七十年代末以后,虽然历经了数次放权、搞活改革,但并没有触及制约企业发展的根本因素,只是简单地增加了"一把手"控制企业全部资源的权利,特别是近年来的人事制度改革更是加剧了某些"一把手"排除异己的绝对权力。

再一方面,管理不科学,生产要素配置效率低下。由于历史的原因,新华书店的管理至今还停留在"人治"环节,随意性大,生产要素的配置盲目性大,经营理念、管理理念也不适应市场经济的要求。政企不分、政资不分、管理不科学,规范的现代企业制度就不可能真正建立;管得过多、统得过死的状况不改变,新华书店就不可能充满发展的活力与生机;传统的企业制度不废除,新华书店就不可能胜利涉水深蓝、搏击长空,但是要建立真正意义的现代企业制度,应继续加大中央政策的支持力度。

1.2建立现代企业制度,是解决新华书店深层次矛盾和问题的关键

目前新华书店正处于传统体制向现代体制转轨的重要时期,影响企业发展的深层次矛盾和问题不断显露。而要顺利、快速完成这一历史性转轨,新华书店就必须加快建立现代企业制度。

1.3建立现代企业制度,是促进新华书店全面发展的有效保障

在传统企业制度下,企业发展的命运系于"一把手"一个人或少数几个人,"一把手"的个人因素或少数几个人的因素对企业的发展起着绝对的决定作用,这对企业的发展非常不利,也是不正常的。所以,企业要发展,就必须创新"一把手"的选任机制、激励机制,企业发展的命运不能完全由某一个人左右,加快建立现代企业制度,充分发挥所有员工的工作热情和创新能力,聚合一切积极力量为企业的全面持久发展奠定牢固的群众基础和提供可靠的人员保障。

2.加快人事制度改革是新华书店建立现代企业制度的核心

人的问题是改革的关键问题,加快人事制度改革是深化新华书店改革、建立现代企业制度的核心。

(1)加快人事制度改革,首先要明确改革的目的和方向。基于"人力资源也是生产力",人事制度改革要以提高生产效益和生产力的发展为目的,充分发挥人的潜能,积极营造人力资源生机勃勃的环境空间,为建立现代企业制度释放巨大的推动力。

(2)加快人事制度改革,关键是创新"一把手"的选任机制,并首先履行这种机制。目前的人事制度改革大都停留在中层干部和一般员工层面,对"一把手"的选任问题很少提及。而实际上这个问题是至关重要的,也是第一位的。目前,领导干部的选任基本上是"官选","民选"只是一种陪衬。人事选任的考核要定期举行,入选人员进入全省后备人才库,对后备人员要异地交流、挂职培养,人事选任必须首先使用后备人才,彻底实现后备人才零库存,对造成后备人才积压、长期或永久后备的,要从重追究相关责任人的责任。

(3)加快人事制度改革,重点是打破"只上不下"的传统,设立并不断完善"能者上、庸者下"的内部人才流动机制,努力克服灰色交易、拉帮结派和山头主义。在纵向上,要广泛应用"3+"选拔模式,包括中层班子和领导班子的配备。在横向上,不适合此岗位而适合彼岗位的人,就应该让他到彼岗位发挥才智和特长。

3.建立现代企业制度必须解决的其它问题

(1)监督与被监督的问题。要杜绝监督与被监督同一性的现象,企业行为绝对不能由行为实施者来充当监督者,企业行为的效果也不能由行为的实施者来评判,否则,一切都会流于形式。因此有必要加强工会和全体职工大会的独立发言权。

(2)人才的引进和培养问题。随着市场向国外延伸,现有人员肯定不能胜任全部的工作,如外语人才、特殊管理人才等人才的奇缺将是一个现实问题。这就首先要求企业本身要抓紧时间培训现有人员,特别是后备人员,培训的方式有多种,其中最重要的就是将相关后备人员送入高校继续深造;在内部开发的基础上适度引进紧缺人才。

上一篇:中小学建设标准培训下一篇:建设项目管理成功的20个重要因素