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)对代码本体的每一位加权求和 
设代码本体为C1C2Cn,权因子为P1P2,„,Pn,加权求和:S=CiPi;其中权因子可取
自然数123,„,几何级数2481632,„,质数235711„,等等。
(2)以模除和得余数 R
=Smod(M) 
其中:R表示余数;M表示模数,可取M1011,等等。
(3)模减去余数得校验位
  Cn+1=M-R  
例如,代码本体为123456,权因子为173173,模为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为校验位。 
当自检码C1C2CnCn+l(其中Cn+1为校验位)输入计算机后,对C1C2Cn分别乘以原来的权因子,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小时内删除。