2.2代码设计
2.21 代码设计的原则
代码是代表系统中客观存在的事物名称、属性或状态的符号,而代码设计是 将系统中具有某些特征或属性的信息归并到一起。我们在代码设计中遵循以下原则:
唯一性:在一个分类编码标准中,每一个编码对象仅有一个代码,一个代码只唯一表示一个编码对象。如:学号:学生的学号是学生在学校的唯一代码。
合理性:代码结构与分类体系相适应。
可扩充性:在设计过程中留有适当的空间,以便以后的补充。如:学号可以 增添位数。
简单性:代码结构简单,以便节省存储空间和提高系统的处理效率。
实用性:代码能反映对象的特点。
规范性:代码的书写统一。
下面表格为详细的代码格式要求等介绍:
代码对象 | 一卡通的卡 |
编码目的 | 是数据表达标准化,简化程序设计,加快数据输入速度,减少出错率,节省存储空间,提高数据处理速度。 |
代码结构: XX XX XX XXX 办卡年份 系号 专业号 顺序号 | |
编码要点: (1)唯一确定性。一个对象只能赋予一个唯一的代码,一个代码也只 能标识一个对象,不许重码、乱码、错码。 (2)可扩充性。当实体的集合不断增加扩大时,应可直接利用源代码 加以扩充不用重新编码。 (3)易识别性。代码便于人们记忆、识别和使用。 (4)简短性。不影响系统容量和可扩充的情况下,代码长度越短越好。 (5)标准化。代码设计要尽可能的标准化。 (6)容易修改。当某个代码在条件、特点或是代表的实体关系发生改 变时容易修改。 | |
表2.7
2.22 代码校验
检错率校验方法代码是数据的重要组成部分,它的正确性将直接影响系统的质量。当人们抄写、录入时,发生错误的可能性很大,如抄写错(把1234写成1235)、易位错(1234记为1243)、隔位易位错(1234记为1432)等等。因此,为了验证输入代码的正确性,要在代码本体的基础上,再外加校验码,使它成为代码的一个组成部分。这就是前面介绍的自检码。
校验码是根据事先规定好的数学方法及代码本体计算出来的。当自检码输入计算机后,计算机按照同样的数学方法,根据代码本体进行计算,将结果与校验位比较,检验输入的代码是否正确。
校验码的生成过程如下:
(1)对代码本体的每一位加权求和
设代码本体为C1C2„Cn,权因子为P1,P2,„,Pn,加权求和:S=∑CiPi;其中权因子可取
自然数1,2,3,„,几何级数2,4,8,16,32,„,质数2,3,5,7,11„,等等。
(2)以模除和得余数 R
=Smod(M)
其中:R表示余数;M表示模数,可取M二10,11,等等。
(3)模减去余数得校验位
Cn+1=M-R ,
例如,代码本体为123456,权因子为1,7,3,1,7,3,模为10,则 S= 1 X 1+2 X 7+3 X 3+4 X 1+5 X 7+6 X 3=81
R=81 mod (10)=1
校验位为:10-1=9
所以自检码为1234569,其中9为校验位。
当自检码C1C2„CnCn+l(其中Cn+1为校验位)输入计算机后,对C1C2„Cn分别乘以原来的权因子,Cn+l乘以1,所得的和被模除,若余数为零,则该代码一般说来是正确的,否则输入有错。
在这种方法中,权和模可有多种取法,表列出一些权和模的。
模 | 权 | 抄写错检错率 | 易位错检错率 | 隔位易位错检错率 | 页面设计代码随机错检错率 |
10 | 1,2,1,2 1,2 | 100% | 98% | 0% | |
10 | 1,3,1,3 1,3 | 100% | 89% | 90% | |
10 | 7,6,5,4, 3,2 | 87% | 100% | ||
11 | 9,8,7,4, 3.2 | 95% | 100% | 89% | |
11 | 1,3,7,1 3.7 | 100% | 89% | ||
11 | 7,6,5,4 3,2 | 100% | 100% | 100% | |
表2.8
2.23 主要程序的设计
(一)一卡通系统信息的文件读入
void output(node *head)
{ int i=0,n=15,j=1;
node *p=head->next;
ofstream ofile1,ofile2;
ofile1.open("");
ofile2.open("");
ofile1<<"一卡通号"<<setw(n)<<"学号"<<setw(n)<<"一卡通密码"<<setw(n)<<"一卡通余额"<<setw(n);
ofile1<<"所属人"<<setw(n)<<"是否挂失"<<setw(n)<<"消费限额"<<setw(n);
ofile1<<"银行卡号"<<setw(n)<<"银行卡密码"<<setw(n)<<"银行卡余额"<<'\n';
ofile2<<"消费金额"<<setw(n)<<"消费时间"<<'\n';
while(p->next!=NULL)
{
j++; ofile1<<p->xinxi.yktnum<<setw(n)<<p->xinxi.yktmm<<setw(n)<<p->xinxi.yktyue<<setw(n); ofile1<<p->xinxi.name<<setw(n)<<p->xinxi.guashi<<setw(n)<<p->xinxi.xiane<<setw(n); ofile1<<p->xinxi.yhknum<<setw(n)<<p->xinxi.yhkmm<<setw(n)<<p->xinxi.yhkyue; ofile1<<'\n';
i=0;
while(i<20)
{
ofile2<<p->xinxi.xiaofei[i]<<setw(40)<<p->xinxi.time[i]<<'\n'; i++; }
p=p->next; }
ofile1.close(); ofile2.close(); }
(二)一卡通系统信息的文件存储
int xuan(MOUSEMSG m)
{
int i=0;
if(m.x>=140&&m.x<=160&&m.y>=200&&m.y<=220)
i=1;
if(m.x>=140&&m.x<=160&&m.y>=300&&m.y<=320)
i=2;
if(m.x>=140&&m.x<=160&&m.y>=400&&m.y<=420)
i=3;
if(m.x>=140&&m.x<=160&&m.y>=500&&m.y<=520)
i=4;
if(m.x>=610&&m.x<=6300&&m.y>=5400&&m.y<=560)
i=0;
return i; }
(三)一卡通密码修改函数
void gaimm2(node *head,int &j)
{
system("cls");
node *p=head->next;
long int num;
Float xiane1,xiane2;
cout<<"请输入您的银行卡号:\n";
cin>>num;
while(p->next!=NULL&&p->xinxi.yhknum!=num)
{
p=p->next;
}
if(p->next==NULL)
cout<<"银行卡号输入有误!\n";
if(p->xinxi.yhknum==num) {
cout<<"请输入您的银行卡原密码:\n";
while(1) {
cin>>mm1; }
(四)系统各功能选择及界面的编制
void zhuanzhang(node *head,int &j)
{
system("cls");
node *p=head->next;
long int num,mm;
float shuzi1,shuzi2;
int m,n=0,y,i; j=0;
cout<<"请输入您的选择:\n\n";
cout<<"1.一卡通及绑定银行卡余额查询\n";
cout<<"2.一卡通银行卡转账\n";
cout<<"3.绑定银行卡充值\n";
while(1) { cin>>m; if(m==1||m==2||m==3)
break;
else
cout<<"输入有误!请重新输入!\n"; }
cout<<"请输入您的一卡通号:\n";
cin>>num;
while(p->next!=NULL&&p->xinxi.yktnum!=num
p=p->next; if(p->next==NULL)
{
cout<<"一卡通号输入有误或没有注册!\n"
y=0;
}
if(p->xinxi.yktnum==num)
{
cout<<"请输入一卡通密码(您有三次密码输入机会):\n";
while(1) { cin>>mm; if(mm!=p->xinxi.yktmm)
cout<<"输入有误,请重新输入!!\n"; if(mm==p->xinxi.yktmm)
break;
n++;
if(n==3)
break; }
if(mm=p->xinxi.yktmm)
{
if(m==1)
{
cout<<"一卡通余额为:"<<'\t'<<p->xinxi.yktyue<<"元"<<'\n';
cout<<"绑定银行卡余额为:"<<'\t'<<p->xinxi.yhkyue<<"元"<<'\n';
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论