以前写的数据结构课设
来源:互联网 发布:php pdo bindvalue 编辑:程序博客网 时间:2024/04/30 02:51
用c/c++实现的数据结构课设,写的比较低端,那个模糊查找的应该用LCS写的,我那个时候写的不好,现在也没什么兴趣改了,现在贴出来,作为一个纪念,勿喷~~~
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<conio.h>#include <process.h>using namespace std;#define N 40typedef struct Node{ char a[N][N]; //姓名 性别 生日 电话 所在地 分组 char name[N]; //名字首字母 struct Node *next;} *node;char Group[N][N]; // 1 2 3 4 5 6char type[N][N]={"","姓名","性别","生日","电话","所在地","分组"};int vis[N];char start[N][N];char to[N][N],k;int pos[3]={1};node root,tail;void readFriend(); //读取 Friend.txt 文件夹中 联系人的内容void readGroup(); //读入Group.txt 文件夹中 分组信息void idshow(); //显示各种操作的信息void typeshow(); //显示操作哪一个属性的函数void change(); //修改联系人信息的函数void inset(); //新添联系人void delet() ; //删除联系人的操作(可以删除多个具有相同属性的联系人)void showall(); //输出所有联系人void show(); //输出特定属性的联系人bool In(wchar_t start, wchar_t end, wchar_t code); //返回汉字首字母的函数char convert(wchar_t n) ;char* TransformToSpell(char name[]) ;bool Strcmp(char *a,char *b) //自定义的Strcmp 函数,从头开始,当目标串是文本串字串就返回true{ for(int i=0;b[i];i++) if(a[i]!=b[i]) return false; return true;}void readFriend() //读取 Friend.txt 文件夹中 联系人的内容{int i,j;char ch[N];root=(node)malloc(sizeof(Node));root->next=NULL;root->next=NULL;tail=root;while(~scanf("%s",ch)){node temp;temp=(node)malloc(sizeof(Node));strcpy(temp->a[1],ch);for(int i=2;i<=6;i++){scanf("%s",temp->a[i]);} i=6; if((*(temp->a[6]))>='0'&&(*(temp->a[6]))<='9') strcpy(temp->a[i],Group[*(temp->a[6])-'0']); for(int i=0;i<1;i++) if(*(temp->a[pos[i]])<0) { char hh[N]; strcpy(hh,TransformToSpell(temp->a[pos[i]])); strcpy(temp->name,hh); } temp->next=tail->next; tail->next=temp; tail=temp;}}void readGroup() //读入Group.txt 文件夹中 分组信息{int i;char ch[N];while(~scanf("%d%s",&i,ch)){strcpy(Group[i],ch);}}void idshow() //显示各种操作的信息{printf("\n 欢迎使用联系人管理系统,联系人信息已经读入,请选择您的操作\n\n");printf("\t\t - - - - - - - - - - - - - - - - \n\n") ;printf("\t\t| 修改联系人信息请按 1 |\n\n");printf("\t\t| 添加新的联系人请按 2 |\n\n");printf("\t\t| 删除已有联系人请按 3 |\n\n");printf("\t\t| 查看所有联系人请按 4 |\n\n");printf("\t\t| 查看特征联系人请按 5 |\n\n") ; printf("\t\t| 结束所有的操作请按 0 |\n\n"); printf("\t\t - - - - - - - - - - - - - - - -\n") ; printf("\n请输入操作对应的序号: ");}void typeshow() //显示操作哪一个属性的函数{ printf("\n"); for(int i=1;i<=6;i++){printf("%-7s ",type[i]);}printf("\n");for(int i=1;i<=6;i++)printf("%-7d ",i);printf("\n\n");}void change() //修改联系人信息的函数{typeshow();k=0;printf("请输入欲修改的上面的选项对应的编号 内容 和修改后的内容(有多项一直输入,0为结束): \n"); int x; while(scanf("%d",&x),x){vis[k]=x;scanf("%s",start[k]);scanf("%s",to[k]);k++;}node temp=root->next; int time=0;while(temp){ bool flag=true; for(int i=0;i<k;i++)if(strcmp(temp->a[vis[i]],start[i])) { flag=false; break; } if(flag) { for(int i=0;i<k;i++) strcpy(temp->a[vis[i]],to[i]);time++; }temp=temp->next;} if(time==0){printf("Sorry,联系人中无此人 !\n");return ;}printf("修改人数为 %d \n\n",time);}void inset() //新添联系人{printf("请输入 姓名 性别 生日 电话 所在地 分组 \n "); node temp;temp=(node)malloc(sizeof(Node));for(int i=1;i<=6;i++) scanf("%s",temp->a[i]); char ss=*(temp->a[6]); if(ss>='1'&&ss<='9') strcpy(temp->a[6],Group[ss-'0']); for(int i=0;i<1;i++) if(*(temp->a[pos[i]])<0) { strcpy(temp->name,TransformToSpell(temp->a[pos[i]])); // printf("%s\n",temp->name); } temp->next=root->next;root->next=temp;printf("插入成功!\n\n");}void delet() //删除联系人的操作(可以删除多个具有相同属性的联系人){typeshow();k=0;printf("请输入欲删除的上面的选项对应的编号 内容 和修改后的内容(有多项一直输入,0为结束): \n");int x;while(scanf("%d",&x),x){vis[k]=x;scanf("%s",start[k]);k++;}node s,e;int time=0;s=root;e=s->next;while(e){ bool flag=true; for(int i=0;i<k;i++)if(strcmp(e->a[vis[i]],start[i])) { flag=false; break; } if(flag) { time++; s->next=e->next; e=e->next; } else { s=e; e=e->next; }} if(time==0){printf("Sorry,联系人中无此人 !\n");return ;}printf("此次操作删除了 %d 个元素 !\n\n",time);}void showall() //输出所有联系人{node temp=root->next;while(temp){printf("\n");for(int i=1;i<=6;i++)printf("%-10s ",temp->a[i]);printf("\n");temp=temp->next;}printf("\n\n");}void show() //输出特定属性的联系人{typeshow();k=0;printf("请输入欲查看的上面的选项对应的编号 内容(有多项一直输入,0为结束): \n"); int x; while(scanf("%d",&x),x){vis[k]=x;scanf("%s",start[k]);if(x==6&&start[k][0]>='0'&&start[k][0]<='9')strcpy(start[k],Group[start[k][0]-'0']);k++;} printf("\n");node temp=root->next; int num=0;while(temp){ bool flag=true; for(int i=0;i<k;i++) { if(vis[i]==1&&start[i][0]>0) { if(!Strcmp(temp->name,start[i])) flag=false; continue; } if(!Strcmp(temp->a[vis[i]],start[i])) { flag=false; break; } } if(flag) { num++; printf("\n"); for(int i=1;i<=6;i++) printf("%-10s ",temp->a[i]); printf("\n"); } temp=temp->next; } if(num==0)printf("Sorry,没有符合条件的联系人!\n"); printf("\n");}bool In(wchar_t start, wchar_t end, wchar_t code){if (code >= start && code <= end){return true;}return false;}char convert(wchar_t n){if (In(0xB0A1,0xB0C4,n)) return 'a';if (In(0XB0C5,0XB2C0,n)) return 'b';if (In(0xB2C1,0xB4ED,n)) return 'c';if (In(0xB4EE,0xB6E9,n)) return 'd';if (In(0xB6EA,0xB7A1,n)) return 'e';if (In(0xB7A2,0xB8c0,n)) return 'f';if (In(0xB8C1,0xB9FD,n)) return 'g';if (In(0xB9FE,0xBBF6,n)) return 'h';if (In(0xBBF7,0xBFA5,n)) return 'j';if (In(0xBFA6,0xC0AB,n)) return 'k';if (In(0xC0AC,0xC2E7,n)) return 'l';if (In(0xC2E8,0xC4C2,n)) return 'm';if (In(0xC4C3,0xC5B5,n)) return 'n';if (In(0xC5B6,0xC5BD,n)) return 'o';if (In(0xC5BE,0xC6D9,n)) return 'p';if (In(0xC6DA,0xC8BA,n)) return 'q';if (In(0xC8BB,0xC8F5,n)) return 'r';if (In(0xC8F6,0xCBF0,n)) return 's';if (In(0xCBFA,0xCDD9,n)) return 't';if (In(0xCDDA,0xCEF3,n)) return 'w';if (In(0xCEF4,0xD188,n)) return 'x';if (In(0xD1B9,0xD4D0,n)) return 'y';if (In(0xD4D1,0xD7F9,n)) return 'z';return '\0';}char* TransformToSpell(char name[]){char chr[N];wchar_t wchr = 0;char* Spell = new char[strlen(name)/2];memset(Spell, 0x00, sizeof(char)*strlen(name)/2+1);for (unsigned int i = 0, j = 0; i < (strlen(name)/2); ++i){memset(chr, 0x00, sizeof(chr));chr[0] = name[j++];chr[1] = name[j++];chr[2] = '\0';wchr = 0;wchr = (chr[0] & 0xff) << 8;wchr |= (chr[1] & 0xff);Spell[i] = convert(wchr);}return Spell;}int main(){ freopen("H:/c++/数据结构实验/寒假作业/Group.txt","r",stdin); //freopen("H:/c++/数据结构实验/寒假作业/out.txt","w",stdout); readGroup(); freopen("H:/c++/数据结构实验/寒假作业/Friend.txt","r",stdin); readFriend(); //freopen("H:/c++/数据结构实验/寒假作业/op.txt","r",stdin); freopen("CON","r",stdin); int op; char ch[N]; while(1){ bool flag=false; idshow(); scanf("%d",&op); if(!op) break; //结束操作 if(op==1) //修改 { change(); flag=true; } if(op==2) //插入 { inset(); flag=true; } if(op==3) //删除 { delet(); flag=true; } if(op==4) //输出内容 { showall(); flag=true; } if(op==5) { show(); flag=true; } if(!flag) printf("Sorry,输入有误!\n\n");printf("请输入任意键返回主页面 : ");getchar();getchar();system("cls");} fclose(stdin);freopen("H:/c++/数据结构实验/寒假作业/Friend.txt","w",stdout);showall();return 0;}
Friend.txt
柯亚妮 女 1994 18834662020 湖北 朋友 李勇 男 1991 18912345678 湖北武汉 大学同学 刘晨 女 1992 15301391234 北京 高中同学 王敏 女 1980 13838197777 河南郑州 朋友 张立 男 1985 15612346598 呼和浩特 高中同学 小四川 男 1894 18088888888 武汉 订餐
Group.txt
1 大学同学2 高中同学3 家人4 朋友5 老师6 订餐
李勇 男 1991 18912345678 湖北武汉 1刘晨 女 1992 15301391234 北京 2王敏 女 1980 13838197777 河南郑州 3张立 男 1985 15612346598 呼和浩特 2小四川 男 1894 18088888888 武汉 6
42ksh 男 1994 18749328896 武汉 2412 ksh hello0432 hello0453 男057 高中同学00
1 0
- 以前写的数据结构课设
- 一个以前做的课设
- 本人的数据结构课设
- 以前写的代码....
- 以前写的小游戏
- 数据结构课设的初步程序
- 关于数据结构课设的一些建议:
- 数据结构课设
- 数据结构课设
- 以前的写的 链表堆
- 以前写的 C# 队列
- 以前写的javamail例子
- 以前写的,拿来保存~
- 以前写的时钟程序
- 以前写的一个游戏~
- 以前写的小函数
- 以前写的jsp页面
- 以前写的struts配置文件
- 对于ThinkPHP入口文件以及模块目录结构的学习
- android之Androidstudio下查找sha1
- 第4周项目2-太乐了
- 一个简单的例子教你明白XMLHTTPRequest的原理
- 【JavaScript】JavaScript中的checkbox之全选、全不选、反选
- 以前写的数据结构课设
- POJ 3320 Jessica's Reading Problem(尺取法)
- Android Studio 下安卓 jni 开发错误 undefined reference to AndroidBitmap_getInfo
- 组合数模板
- 学习Java JDBC,看这篇就够了
- 异或运算实现两个数的交换
- bzoj 2140: 稳定婚姻 强连通分量
- 安卓 jni 开发错误 UnsatisfiedLinkError: Native method not found
- 1001. A+B Format (20) - C