信息与电气工程学院
信息系统二级项目
设计说明书
(2013/20##学年第一学期)
课程名称 :信息系统二级项目设计
题 目 : 小型超市管理系统
专业班级 : 电子信息工程 班
学生姓名 :
学 号:
指导教师 :吴开兴、崔冬、马小进
设计周数 : 2周
设计成绩 :
20 年 月 日
目录
1、 设计目的…………………………………………………………………2
2、项目背景…………………………………………………………………3
3、系统分析…………………………………………………………………3
4、系统设计…………………………………………………………………3
4.1、模块设计……………………………………………………………3
4.1.1、主界面设计……………………………………………………3
4.1.2、销售管理模块设计……………………………………………4
4.1.3、会员信息模块…………………………………………………4
4.2、程序设计……………………………………………………………5
4.2.1、管理员登录……………………………………………………5
4.2.2、管理员密码修改………………………………………………6
4.2.3、会员的录入……………………………………………………7
4.3各模块测试……………………………………………………………9
5、设计总结……………………………………………………………………9
6、参考文献…………………………………………………………………10
小型超市管理系统总结设计
1、设计目的
利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的就、具有良好人机交互界面的小型超市管理系统,为超市提供准确、精细、快速的超市管理以及销售信息。通过本管理系统软件,帮助本超市工作人员利用计算机,极为方便的对超市的有关数据进行管理、输入、输出、查找等有关操作,是杂乱的超市数据能够具体化、直观化、合理等。
系统开发的总体任务是实现Visual C#与MS SQL 2000的组合应用,实现可以用VC#的方式调用SQL的数据库,有一定的透明性。
小型超市管理系统需要完成的功能主要有:
a.商品各种信息的输入,包括商品基本信息,详细信息和简历等。
b.各种商品信息的查询。
c.各种商品信息的修改。
d.供应商信息的输入,查询,和修改等。
e.商品库的输入,查询,和关系性修改等。
f.商品库的关系模式的完整性实现。
g.商品供应商的输入,查询,和修改等。
h.系统管理的管理员的登入。
i.会员各种信息的输入,包括会员的基本信息,详细信息等。
本软件控件均以中文形式表示,对普通程序使用者的查询提供简单方便的快捷操作,不需要技术含量。
操作人员与维护人员应懂的SQL语言
2 项目背景
开发软件系统的名称:小型超市管理系统
任务的提出者:小型超市管理人员
项目开发者:河北工程大学信息1003班小型超市管理开发小组
用户:小型超市管理人员及工作人员
实现软件单位:小型超市用户与开发小组
3、系统分析
根据系统分析的结果,按照结构化的系统设计方法,小型超市销售管理管理系统从功能由以下子系统组成。总体结构如图1所示。
图1 小型超市销售管理系统总体结构图
4、系统设计
4.1、项目模块
4.1.1 主界面的设计
4.1.2 销售管理模块
4.1.3 会员信息模块
4.2、程序设计
4.2.1 管理员登录
string connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BookInfo.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection conn = new SqlConnection(connString);
conn.Open();
string sql = "select*from UserInfo where UserName='" + txtUserName.Text.Trim().ToLower() + "'and UserPwd='" + txtUserPwd.Text.Trim() + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
username = dr["UserName"].ToString();
frmMain frm = new frmMain();
frm.Show();
this.Hide();
}
else
{
MessageBox.Show("用户名或密码错误!!", "出错了!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
dr.Close();
conn.Close();
4.2.2 管理员密码修改
if (txtNewPwd.Text.Trim() == txtNewPwdAgain.Text.Trim())
{
string connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BookInfo.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection conn = new SqlConnection(connString);
conn.Open();
string sqlCheckPwd = "select count(*)from UserInfo where UserName='" + frmLogin.username + "'and UserPwd='" + txtOldPwd.Text.Trim() + "'";
SqlCommand cmdCheckPwd = new SqlCommand(sqlCheckPwd, conn);
int j = (int)cmdCheckPwd.ExecuteScalar();
if (j == 1)
{
string sql = "upDate UserInfo set UserPwd='" + txtNewPwd.Text.Trim() + "'where UserName='" + frmLogin.username + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
int i = cmd.ExecuteNonQuery();
if (i == 1)
{
MessageBox.Show("恭喜你,密码修改成功。");
}
else
{
MessageBox.Show("很抱歉,密码修改失败。");
}
}
else
{
MessageBox.Show("旧密码输入不正确!");
}
conn.Close();
}
else
{
MessageBox.Show("你的两次新密码不一致,请重新输入!");
}
4.2.3 会员的录入
string studentSex = "";
if (optMale.Checked)
{
studentSex = "男";
}
if (optFemale.Checked)
{
studentSex = "女";
}
string connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BookInfo.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection conn = new SqlConnection(connString);
conn.Open();
string sql = "insert into StuInfo(StuID,StuName,StuSex,StuJiGuan,StuMajor)values('" + txtStuID.Text + "','" + txtStuName.Text.Trim() + "','" + studentSex + "','" + txtStuJiGuan.Text + "','" + txtStuMajor.Text + "')";
//string sql = "insert into StuUserInfo(StuUserName,StuUserPwd)values('" + txtStuName.Text.Trim() + "','" + txtStuOldPwd + "')";
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
int i = cmd.ExecuteNonQuery();
if (i == 1)
{
MessageBox.Show("添加成功");
}
else
{
MessageBox.Show("添加失败");
}
}
catch
{
MessageBox.Show("会员信息不需要重复登记,谢谢!");
}
conn.Close();
}
else
{
MessageBox.Show("编号不能为空!");
}
4.3、各模块测试
4.3.1、库存测试
4.3.2、报警测试
5、设计总结
通过这一段时间的设计让我明白了很多的道理,在我们设计的过程中要懂得变通,有时候看似没法解决的问题当我们换个思路的时候也许就很好解决。通过近一周的制作与设计,使我从一个对超市管理系统不太了解成为了一个熟悉超市管理员工作流程、超市管理系统各种功能的人,所以在这次实训中我的收获特别大。从上个学期制作数据库开始接触超市管理系统到这个学期使用C#语言编辑开发界面,我感觉自己有了很大的进步。
在这次实训过程中,我遇到了很多在平时想不到的问题,看似简单但是却不好处理,比如:无法将数据写入到数据库中、系统窗体的整体布局等都不是我所擅长的。好在最终通过查看老师留下的资料并且问班里学习成绩好的同学进行询问,最后解决了问题。
6、参考文献
[1] 邱锦伦,C#.NET程序设计教程,北京:清华大学出版社,2006
[2] 孔琳俊,30天学通C#项目案例开发,北京:电子工业出版社,2009
[3] 百 度,www.baidu.com
注:此表必须在同一页面。
第二篇:超市管理系统C++程序实践报告
《C++程序设计》 课程设计报告 设计题目:
专业班级:
小组成员:
指导老师:李大扬
超市管理系统
目 录 2011/6/30
一.设计目的与任务描述…………………………………
二.设计思想………………………………………………
三.系统功能与设计过程…………………………………
四.程序源代码……………………………………………
五.运行情况………………………………………………
六.心得体会………………………………………………
七.参考文献………………………………………………
超市管理系统
一.设计目的与任务描述
设计目的:
1.熟悉C++语言系统开发的基本过程
2.巩固所学知识,培养和提高学生分析和解决实际问题的能力
任务描述:
需求分析:
中小型超市采购的商品一般都成千上万件。对这些商品进行有效的管理必不可少。每件商品一般都需要记录商品名、条形码、类别、价格、出厂日期等商品的基本信息。除此之外,还需要记录商品的其他相关信息,如生产厂家、供货处代码、厂家网址、厂家电话等。超市商品的相关信息需要存储到文件系统中,一般都需要提供对商品信息的添加、编辑、删除等操作。超市管理员每天都会记录购进的商品信息,核销过期的商品等。
为了巩固我们所学的C++语言程序设计知识,也为了满足课程设计的要求,我们在对几个中小型超市进行调研的基础上,设计和实现一个小型的超市商品管理系统,提供商品系统的添加、删除、编辑等功能。同类系统多数使用结构体数组来操作数据,本系统使用链表结构操作数据,提高了数据处理的效率。
设计一个小型超市管理系统,用链表来存储商品的基本信息(包括商品名称,代码产地,单价等)。完成以下基本功能:
A、添加商品信息:有商品代码、商品名称、产地、商品单价、库存量等。
B、修改,删除商品信息:输入商品名称,修改或删除相应商品信息。
C、查询,统计商品:输入商品名称,查询,统计相应商品信息。
二:设计思想
(1) 设计class goods商品类,实现对商品信息的描叙;设计 class Supermarket类,实现对商品信息的增加,删除,修改,查询,统计等。以下是函数功能表:
(2) 用类的成员函数对链表的数据进行操作,其功能如上表所列。
(3) 设计菜单来实现功能设计
1增加商品
2删除商品
3修改商品
4查询商品;
5统计商品\
6—退出
三.设计类及对象
本程序定义了两个类,后者为前者的友元类。定义如下:
1. class Goods
class Goods
{
protected:
char name[20]; //商品名称
double num; //商品代码
char address[30]; //商品产地
int price; //商品单价
double count; //该类商品库存量
Goods *next;
public:
Goods(double num,char*name,char*address,int price,double count)
{
this->num=num;
strcpy(this->name,name);
strcpy(this->address,address);
this->price=price;
this->count=count;
}
void Output()
{
cout<<"num:"<<num<<" name:"<<name<<" address:"<<address
<<" price:"<<price<<" count:"<<count<<endl;
}
friend class Supermarket;
};
2 class Supermarket; class Supermarket
{
private:
Goods *goods; //商品表
void Clear(); //清除内存中数据
public:
Supermarket()
{
goods=NULL;
Load();
}
~Supermarket()
{
Goods*p;
p=goods;
while(p)
{
p=p->next;
delete goods;
goods=p;
}
goods=NULL;
}
void Add(); //增加商品
void Delete(); //删除商品
void Modify(); //修改商品
void Query(); //查询商品
void Add_up(); //统计商品
void Save(); //基础数据存盘
void Load(); //基础数据装入
};
四.程序源代码
// supermarket.cpp : Defines the entry point for the console application. //
//#include "stdafx.h"
//
// int main(int argc, char* argv[])
// {
// return 0;
// }
#include<iostream.h>
#include<fstream.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
int n=0; //全局数据,结点数量
class Goods
{
protected:
char name[20]; //商品名称
double num; //商品代码
char address[30]; //商品产地
int price; //商品单价
double count; //该类商品库存量
Goods *next;
public:
Goods(double num,char*name,char*address,int price,double count)
{
this->num=num;
strcpy(this->name,name);
strcpy(this->address,address);
this->price=price;
this->count=count;
}
void Output()
{
cout<<"num:"<<num<<" name:"<<name<<" address:"<<address
<<" price:"<<price<<" count:"<<count<<endl;
}
friend class Supermarket;
};
class Supermarket
{
private:
Goods *goods; //商品表
void Clear(); //清除内存中数据
public:
Supermarket()
{
goods=NULL;
Load();
}
~Supermarket()
{
Goods*p;
p=goods;
while(p)
{
p=p->next;
delete goods;
goods=p;
}
goods=NULL;
}
void Add();
void Delete();
void Modify();
void Query();
void Add_up();
void Save();
void Load();
};
void Supermarket::Clear()
{
Goods* p;
p=goods;
while(p)
{
//增加商品 //删除商品 //修改商品 //查询商品 //统计商品 //基础数据存盘 //基础数据装入 //清除内存中商品数据(内部使用)
goods=p->next;
delete p;
p=goods;
}
}
void Supermarket::Add()
{
Goods *p;
double num,count;
char name[20],address[30];
int price;
cout<<"\n请输入新增商品信息:\n";
cout<<"商品代码:";cin>>num;
cout<<"商品名称:";cin>>name;
cout<<"商品产地:";cin>>address;
cout<<"商品单价:";cin>>price;
cout<<"该商品库存量:";cin>>count;
//创建新商品类结点
p=new Goods(num,name,address,price,count);
p->next=NULL;
if(goods==NULL)
{
goods=p;
n++;
}
else
{
Goods *p2=goods;
while(p2->next)
p2=p2->next;
p2->next=p;
n++;
}
}
void Supermarket::Delete() //删除商品
{
char name[20];
cout<<"\n请输入要删除的商品名称:\n";
cin>>name;
//查找要删除的结点
Goods *p1,*p2; p1=goods;
while(p1)
{
if(strcmp(p1->name,name)==0) break;
else
{
p2=p1;
p1=p1->next;
}
}
//删除结点
if(p1!=NULL)
{
if(p1==goods)
{
goods=p1->next;
delete p1;
n--;
}
else
{
p2->next=p1->next;
delete p1;
n--;
} //若找到结点,则删除 //若要删除的结点是第一个结点//若要删除的结点是后续结点
cout<<"找到并删除\n";
}
else //未找到结点
cout<<"Sorry,未找到!\n";
}
void Supermarket::Modify() //修改商品信息
{
double num,count;
char name[20],address[30];
int price;
cout<<"\n 修改商品,请输入要查的商品名称:\n";
cout<<"Name:"; cin>>name;
//查找要修改的结点
Goods *p1,*p2; p1=goods;
while(p1)
{
if(strcmp(p1->name,name)==0) break;
else
{
p2=p1;
p1=p1->next;
}
}
//修改结点
if(p1!=NULL) //若找到结点
{
p1->Output();
cout<<"\n请选择要修改的信息(1—商品代码,2—商品名称,3—产地,4—单价,5—该商品库存量,6—修改全部信息):\n";
int a; cin>>a;
switch(a)
{
case 1:cout<<"请输入新代码:"; cin>>num;
strcpy(name,p1->name);strcpy(address,p1->address);price=p1->price;count=p1->count; break;
case 2:cout<<"请输入新名称:"; cin>>name;
num=p1->num;strcpy(address,p1->address);price=p1->price;count=p1->count; break;
case 3:cout<<"请输入新产地:"; cin>>address;
num=p1->num;strcpy(name,p1->name);price=p1->price;count=p1->count; break;
case 4:cout<<"请输入新单价:"; cin>>price;
num=p1->num;strcpy(name,p1->name);strcpy(address,p1->address);count=p1->count; break;
case 5:cout<<"请输入新库存数据:"; cin>>count;
num=p1->num;strcpy(name,p1->name);strcpy(address,p1->address);price=p1->price; break;
case 6:cout<<"请输入新信息:\n";
cout<<"商品代码:"; cin>>num;
cout<<"商品名称:"; cin>>name;
cout<<"商品产地:"; cin>>address;
cout<<"商品单价:"; cin>>price;
cout<<"该商品库存量:"; cin>>count; break;
}
//创建新商品结点
Goods *p3;
p3=new Goods(num,name,address,price,count);
//员工结点替换到链表
p3->next=p1->next;
if(p1==goods) //若要替换的结点是第一个结点
goods=p3;
else //若要替换的结点是后续结点
p2->next=p3;
delete p1; //删除原来的商品结点
cout<<"修改成功!\n";
}
else //未找到结点
cout<<"Sorry,未找到!\n";
}
void Supermarket::Query()
{
cout<<"\n****查询商品****\n";
char name[20];
cout<<"\n请输入要查询的商品名称:\n";
cin>>name;
Goods *p1=goods;
while(p1)
{
if(strcmp(p1->name,name)==0) break;
else p1=p1->next;
}
if(p1!=NULL) //若找到结点
{
cout<<"\n要查询的信息如下:\n";
cout<<"该类商品代码:\t"<<p1->num<<"\t"<<"该类商品名称:\t"<<p1->name<<"\t\n";
cout<<"该类商品产地:\t"<<p1->address<<"\t"<<"该类商品单价:\t"<<p1->price<<"\t\n";
cout<<"该类商品库存量:\t"<<p1->count<<"\t";
}
else //未找到结点
cout<<"\nSorry,未找到该类商品!\n";
}
void Supermarket::Add_up() //统计超市商品总数量于价值
{
cout<<"\n****商品统计****\n";
double Amount=0,Value=0;
char name[20];
cout<<"\n请输入要统计的商品名称:\n";
cin>>name;
Goods *p1;
p1=goods;
while(p1)
{
if(strcmp(p1->name,name)==0) break;
else p1=p1->next;
}
if(p1)
{
while(p1)
{
Amount+=p1->count;
Value+=p1->count*p1->price;
p1=p1->next;
}
cout<<"商品总数量是:\n";
cout<<Amount;
cout<<"\n商品总价值是:\n";
cout<<Value;
}
else
cout<<"\nSorry,未找到该类商品!\n";
}
void Supermarket::Save() //数据存盘
{
cout<<"是否保存?[Y/N]";
char a;
cin>>a;
if(a=='n')return;
if(a=='y'||a=='Y')
{
ofstream outfile("base.txt",ios::out);
if(!outfile){cerr<<"open error!";exit(1);}
Goods* p;p=goods;
while(p)
{
outfile<<"商品代码\t\t"<<p->num<<endl;
outfile<<"商品名称\t\t"<<p->name<<endl;
outfile<<"商品产地\t\t"<<p->address<<endl;
outfile<<"商品单价\t\t"<<p->price<<endl;
outfile<<"该商品库存量\t"<<p->count<<endl;
cout<<endl;
p=p->next;
}
outfile.close();
cout<<"已完成数据的保存\n";
}
}
void Supermarket::Load() //数据装入
{
Goods *p=goods;
ifstream infile("base.txt",ios::in|ios::nocreate);
//读一条信息
infile>>p->num>>p->name>>p->address>>p->price>>p->count;
while(infile.good())
{
//创建商品结点
p=new Goods(p->num,p->name,p->address,p->price,p->count);
p->next=NULL;
//商品结点加入
if(goods) //若已存在结点
{
Goods*p2;
p2=goods;
while(p2->next) //查找尾结点
p2=p2->next;
p2->next=p; //连接
}
else //表空
goods=p; //连接
//读下一条信息
infile>>p->num>>p->name>>p->address>>p->price>>p->count;
}
cout<<"\n商品数据已经装入\n";
}
int main()
{
char c;
Supermarket a;
do{
cout<<"\n****超市进销存管理系统****\n";
cout<<" 1—增加商品\n";
cout<<" 2—删除商品\n";
cout<<" 3—修改商品\n";
cout<<" 4—查询商品\n";
cout<<" 5—统计商品\n";
cout<<" 6—退出 \t 请选择(1—6):";
cin>>c;
switch(c)
{
case '1':a.Add();
a.Save();break;
case '2':a.Load();
a.Delete();
a.Save();break;
case '3':a.Load();
a.Modify();
a.Save();break;
case '4':a.Load();
a.Query(); break;
case '5':a.Load();
a.Add_up();break;
}
}while(c!='6');
return 0;
}
五.运行情况
1. 程序界面
2.增加商品
3删除商品
3修改商品
4查询商品
5统计商品\
6—退出
六.心得体会
在为期两周的课程设计中,我们小组成员通过完成本次任务,三人体会颇多,学到很多东西。利用设计这次超市管理系统的机会使我们熟练的掌握了这学期所学的有关visual c++中的一些主要知识点和应用点,如类的定义,类的实现,对象的定义,类的继承等等。能够学以致用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴趣。从而对Microsoft Visual C++ 6.0又有了更深入的认识!在这次课程设计中,我们还懂得了程序开发的一些比较重要的步骤,比如需求分析、总体设计、程序模块设计(含功能需求、程序代码设计与分析、运行结果)等。总之,通过这次课程设计,我们收获颇丰,相信会为我们以后的学习和工作带来很大的好处。最重要的还是激发了我们对编程的兴趣和热情,让我们从一个只懂理论变成了能做一些小型程序,让我们对编程更加热爱了。
整体地评价这次课程设计,我认为收获很大,正如上面所说的那样,通过课程设计,既复习了以前的旧知识,又学到了一些新的知识;设计增强了我们所用所学知识去解决具体问题的能力,进一步培养了我们独立思考问题和解决问题的能力。特别是学会了在Visual C++ 集成开发环境中如何调试程序的方法。当然,老师的悉心指导和同学的帮助也是不可忽视的,在此感谢本次课程设计中所有辅导老师对我们的关心和帮助,诚心诚意感谢他们对我的鼓励与教导,是他们在我们小组迷茫的时候给了我些许提示,激发了我们编程的灵感;还有,本次课程设计中,我们小组内部的同学始终坚持着团结合作的精神,当一名成员遇到难以解决的问题时,大家都会把它当作共同遇到的问题,在一起共同探讨,共同发挥自己所学和所知,投入式的互相帮助和解决困难,最终完成任务。最后,本次实践也锻炼了我们面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。
七.参考文献
<<C++程序设计>> 杨长兴 刘卫国主编 中国铁道出版社
<<C++程序设计实践教程>> 杨长兴 刘卫国主编 中国铁道出版社