
一目的
利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C++语言进行程序设计,并规范地完成课程设计报告。通过课程设计,巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(包括问题描述、系统分析、设计建模、代码实现、结果分析等);提高利用计算机分析解决综合性实际问题的基本能力。
二需求分析
1、程序的功能
1)读取数据
1读取原电话本存储的电话信息。
2读取系统随机新建电话本存储的电话信息。
2)查找信息
1根据电话号码查询用户信息。
2根据姓名查询用户信息。
3)存储信息
查询无记录的结果存入记录文档。
2、输出形式
1)数据文件“”存放原始电话号码数据。
2)数据文件“”存放有系统随机生成的电话号码文件。
3)数据文件“”存放未查找到的电话信息。
4)查找到相关信息时显示姓名、地址、电话号码。
3、初步测试计划
1)从数据文件“”中读入各项记录,或由系统随机产生各记录,并且把记录保存到“”中 。
2)分别采用伪随机探测再散列法和再哈希法解决冲突。
3)根据姓名查找时显示给定姓名用户的记录。
4)根据电话号码查找时显示给定电话号码的用户记录。
5)将没有查找的结果保存到结果文件中。
6)系统以菜单界面工作,运行界面友好,演示程序以用户和计算机的对话方式进行。
三概要设计
1、子函数功能
int Collision_Random(int key,int i)
ame=name;ddress=address;
intermediate_data[key].phone=phone;
sign[key]='1';ame=name;
intermediate_data[key].address=address;
intermediate_data[key].phone=phone;
sign[key]='1';
}
void Outfile(string name,int key)ame[0]));i++)
cout< cout<<" "; cout< cout<<" "; cout< } void Rafile()ame!=name)) { key=Collision_Random(key,i+1); j++; if(j=count) return -1; } return key; } int Search_by_phone(string phone)hone!=phone)) { key=Collision_Rehash(key,phone); j++; if(j=count) return-1; } return key; } void main() { count=0; sizeindex=50; int i,k; int ch; char *Fname; sign=new char[sizeindex]; intermediate_data=new Data[sizeindex]; for(i=0;i sign[i]='\\0'; for(i=0;i intermediate_data[i].name=""; intermediate_data[i].phone=""; intermediate_data[i].address=""; } cout<<"§**********************************************************§"< { cout<<"\\n"<< " 请输入选择 : \\n"; cin>>k; switch(k) { case 0: return; case 1: Fname=""; break; case 2: Rafile(); Fname=""; break; default: cout<<"输入序号有误,请重新输入!!!\\n"< } while((k!=1)&&(k!=2)&&(k!=0)); 根 据 姓 名 查 找 *§"< { cout<<"\\n"<< " 请输入选择 : \\n"; cin>>ch; if(ch!=1&&ch!=2) { cout<<" 输入序号有误,请重新输入!!!\\n"< } while((ch!=1)&&(ch!=2)); 输 入 姓 名 查 找 数 据 *§"< do { cout<<"\\n"<< " 请输入选择 : \\n"; cin>>choice; switch(choice) { case 1: { int key1; string name; cout<<"\\n"<<" 请输入姓名: \\n"; cin>>name; key1=Search_by_name(name); Outfile(name,key1); cout<<"\\n"<<"查找结果:\\n"< } break; case 2: { cout<<"\\n"<<" 哈希表: \\n"< if(sign[i]!='0') { cout<<"* "; Outhash(i); } } cout<<"* *"< } break; case 0: return; default: cout<<" 输入序号有误,请重新输入!!!\\n"< } while((choice!=1)&&(choice!=2)&&(choice!=0)); } while(ch==2) { int choice; cout<<"§**********************************************************§"< { cout<<"\\n"<< " 请输入选择 : \\n"; cin>>choice; switch(choice) { case 1: { int key2; string phone; do { cout<<"* 请输入11位的电话号码: "; cin>>phone; if(strlen(&phone[0])!=11) { cout<<"\\n"<<"电话号码输入不正确!请重新输入!!!\\n"< } while(strlen(&phone[0])!=11); key2=Search_by_phone(phone); Outfile(phone,key2); cout<<"\\n"<<"查找结果:\\n"< Outhash(key2); } break; case 2: { cout<<"\\n"<<"哈希表:\\n"< if(sign[i]!='0') { cout<<"* "; Outhash(i); } } cout<<"* *"< } break; case 0: return; default: cout<<" 输入序号有误,请重新输入!!!\\n"< } while((choice!=1)&&(choice!=2)&&(choice!=0)); } }
