📄 main.cpp
字号:
#include <fstream.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <assert.h>
#include "string.h"
#include "list.h"
#include "vector.h"
#include "dictionary.h"
#include "hash.h"
#define hh 31
//查找字符串涵数
//声明涵数
void change();//修改涵数
void insertname();//插入涵数
string name;
unsigned sanlie(const string &s)
{
unsigned sum=0,start=2,len=2;
for(unsigned i=0;i<len;i++)
sum+=s[start+i];
return sum;
}
struct number
{
string name;
string sex;
string Yearofborn;
string school;
string phone;
}a1,b1;
ostream &operator<<(ostream & out,const number & itr){
out<<itr.name<<" "<<itr.sex<<" "<<itr.Yearofborn<<" "<<itr.school<<" "<<itr.phone;
return out;
}
list<association<string,number>*> l1;
listIterator<association<string,number>*> t1(l1);
unsigned (*f)(const string&)=&sanlie;
dictionaryTable<string,number>person(11,f);
void load_data()
{
ifstream fin("hyl.txt");
if(!fin) {
cerr<<" The file 'hyl.txt' is not found."<<endl;
exit(1);}
while(!fin.eof()){
fin>>a1.name;
fin>>a1.sex;
fin>>a1.Yearofborn;
fin>>a1.school;
fin>>a1.phone;
person.setInitial(a1);
person[a1.name]=a1; }
}
void save_data()
{
ofstream disk_hash("hyl.txt");
dictionaryTableIterator<string,number> itr(person);
itr.init();
for(; !itr; ++itr)
disk_hash<<itr()->value()<<endl;
}
void searchname()
{
string keyCode;
char c,w[50];
//c='l';
while((c!='n')&&(c!='N')){
cout<<" 请输入你要查询的好友..."<<endl;
// c=getch();
cout<<" ";
gets(w); keyCode=string(w);
if(person.includesKey(keyCode))
{
b1=person[keyCode];
cout<<"姓名"<<" "<<"性别"<<" "<<"出生年份"<<" "<<"学校"<<" "<<"电话"<<" "<<endl;
cout<<" "<< b1.name<<" "<<b1.sex<<" "<<b1.Yearofborn<<" "<<b1.school<<" "<<b1.phone<<" "<<endl;
}
else
{cout<<endl;
cout<<"该纪录不存在!!!退出查询按'n'或'N' "<<endl;}
cout<<"添加记录按'y'或'Y',继续查询请按任意键"<<endl;
c=getch();
if(c=='y'||c=='Y')
insertname();
}
}
void change(){
string keyCode;
string newchang;
char c,w[50],k[50];
//while((c!='n')&&(c!='N'))
//{
cout<<" 请输入你要修改的好友..."<<endl;
// c=getch();
cout<<" ";
gets(w);keyCode=string(w);
if(!person.includesKey(keyCode))
{
cout<<"对不起,你输入的姓名不存在"<<endl;
cout<<" 退出查询按'n'或'N',继续查询请按任意键."<<endl;
// c=getch();
}
if(person.includesKey(keyCode))
{
b1=person[keyCode];
cout<<"姓名"<<" "<<"性别"<<" "<<"出生年份"<<" "<<"学校"<<" "<<"电话"<<" "<<endl;
cout<<" "<< b1.name<<" "<<b1.sex<<" "<<b1.Yearofborn<<" "<<b1.school<<" "<<b1.phone<<" "<<endl;
cout<<"请选择你要修改的类型:"<<endl;
cout<<" [1]姓名 [2]性别 [3]出生年月 [4]学校 [5]电话"<<endl;
char chose;
chose=getch();
if(chose=='1'){
cout<<"请输入新姓名"<<endl;
gets(k);
newchang=string(k);
b1.name=newchang;
string keyCode=newchang;
goto setup;}
if(chose=='2'){
cout<<"请输入新的性别"<<endl;
gets(k);
newchang=string(k);
b1.sex=newchang;
goto setup;}
if(chose=='3'){
cout<<"请输入新的出生年月"<<endl;
gets(k);
newchang=string(k);
b1.Yearofborn=newchang;
goto setup;}
if(chose=='4'){
cout<<"请输入新的学校"<<endl;
gets(k);
newchang=string(k);
b1.school=newchang;
goto setup;}
if(chose=='5'){
cout<<"请输入新的电话号码"<<endl;
gets(k);
newchang=string(k);
b1.phone=newchang;
goto setup;}
/* switch(chose)
{
case '1':
cout<<"请输入你要新修改的内容";
gets(k);
newchang=string(k);
b1.name=newchang;
string keycode=newchang;
goto setup;
// case 'L': listname(); break;
// case '2': changesex();
}*/
//loop: cout<<"你已成功修改纪录了"<<endl ;
// person[keyCode]=b1;
}
setup: person[keyCode]=b1;
save_data();
cout<<"你已成功修改纪录了"<<endl;
cout<<"请按任意键返回主菜单"<<endl;
c=getch();
}
//复制涵数
/*void copy()
{
string keyCode;
char c,w[100];
while(c!='n')&&(c!='N')
{
cout<<"请输入你要复制的好友姓名..."<<endl;
cout<<" ";
gets(w); keyCode=string(w);
b1.name=string(w);
if(person.includesKey(keyCode))
{
cout<<"该好友纪录存在,你确定要复制些纪录吗? Y/N ?"
c=getch();
if(c='y'||c='Y'){
c1=person[keyCode];
}
}*/
//保存功能,如果路径写错,文件不能保存,而界面并没有提示没有保存纪录
void saveto()
{
char w[100];
cout<<"请输入你要保存些文的路径:(例如 c:\\1.txt)"<<endl;
gets(w);
string path=string(w);
// path=string(lujing);
ofstream disk_hash(path);
if(!disk_hash) {
cerr<<" The file 'hyl.txt' is not found."<<endl;
exit(1);}
dictionaryTableIterator<string,number> itr(person);
itr.init();
for(; !itr; ++itr)
disk_hash<<itr()->value()<<endl;
}
void insertname()
{
string keyCode;
char c,w[100];
// c='l';
while((c!='n')&&(c!='N')){
cout<<"请输入你要添加的好友姓名..."<<endl;
// c=getch();
cout<<" ";
gets(w); keyCode=string(w);
b1.name=string(w);
if(person.includesKey(keyCode))
{
cout<<"该好友己经加入好友录了!"<<endl;
goto loop;
}
else
{
cout<<"请输入性别:";
cin>>w;
b1.sex=string(w);
cout<<"请输入出生年份:";
cin>>w;
b1.Yearofborn=string(w);
cout<<"请输入学校:";
cin>>w;
b1.school=string(w);
cout<<"请输入电话:";
cin>>w;
b1.phone=string(w);
person[keyCode]=b1;
// cin>>;
}
loop: cout<<" 退出添加按'n'或'N',继续添加按其他任意键."<<endl;
c=getch();
}
}
void listname()
{
unsigned i=0;
dictionaryTableIterator<string,number> witr(person);
witr.init(); char c='y';
while((c=='Y')||(c=='y')) {
i=0;
cout<<"姓名"<<" "<<"性别"<<" "<<"出生年份"<<" "<<"学校"<<" "<<"电话"<<" "<<endl;
for(; (!witr)&&(i<40); ++witr,++i) cout<<witr()->value()<<endl;
if (!witr) {
cout<<"继续显示吗?('Y'或'y'确定,否则返回.)"<<endl;
c=getch(); }
else {
cout<<"已显示完,请按任意键返回主菜单"<<endl;
c=getch(); }
}
}
void delename()
{
string key;
char c,w[20];
while((c!='n')&&(c!='N')){
cout<<"请输入你要删除的名字..."<<endl;
cout<<endl;
// c=getch();
gets(w);
key=string(w); cout<<endl;
if(person.includesKey(key)) {
cout<<" 真的要删除???'"<<key<<"'吗?('Y'或'y'确定!!!)"<<endl<<endl;
c=getch();
if((c=='Y')||(c=='y')) person.removeKey(key);
}
else cout<<" 对不起, 你还没有加他为好友."<<endl<<endl;
cout<<" 退出删除按'n'或'N',继续删除按其他任意键."<<endl;
c=getch();
}
}
void main()
{
char mychoice;
while(mychoice!='y'&& mychoice!='Y'){
load_data();
do
{cout<<endl<<endl<<endl;
cout<<" ***电子系通讯录*** "<<endl;
cout<<endl;
cout<<" ##############################################################"<<endl;
cout<<" # #"<<endl;
cout<<" # [S]: Search the name ( 查 找 ) #"<<endl;
cout<<" # #"<<endl;
cout<<" # [I]: Insert the name ( 添 加 ) #"<<endl;
cout<<" # #"<<endl;
cout<<" # [L]: List the all (显示纪录) #"<<endl;
cout<<" # #"<<endl;
cout<<" # [D]: Delete the name ( 删 除 ) #"<<endl;
cout<<" # #"<<endl;
cout<<" # [C]: Change data (修改纪录) #"<<endl;
cout<<" # #"<<endl;
cout<<" # [F]: print data (保 存 纪 录) #"<<endl;
cout<<" # #"<<endl;
cout<<" # [E]: Exit system (退 出 系 统) #"<<endl;
cout<<" # #"<<endl;
cout<<" ##############################################################"<<endl;
cout<<endl<<endl;
cout<<" 请输入字母:S/s,or I/i,or L/l,or D/d or E/e F/f E/e."<<endl<<endl;
mychoice=getch();
switch(mychoice)
{
case 'l':;
case 'L': listname(); break;
case 'd':;
case 'D': delename(); break;
case 'i':;
case 'I': insertname(); break;
case 's':;
case 'S': searchname(); break;
case 'c':;
case 'C': change();break;
case 'f':;
case 'F': saveto();break;
}
} while ((mychoice!='E')&&(mychoice!='e'));
save_data();
cout<<"真要退出系统请按'y'或'Y',其他任意键返回."<<endl;
mychoice=getch();
if (mychoice!='y' && mychoice!='Y') continue;
else break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -