📄 data.cpp
字号:
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define MAX 100
static int attr_no;
struct str{
string s;
};
struct num{
int no;
num * next;
};
str attr_name[MAX];
str attr_type[MAX];
str array[MAX][MAX];
/******************主菜单***********************/
void menu_print()
{
printf("\t***************************\n");
printf("\t请选择要进行的操作:\n\n");
printf("\t1. 数据采集\n");
printf("\t2. 浏览信息\n");
printf("\t0. 退出\n");
printf("\t****************************\n\n");
cout<<"\t";
}
/******************子菜单1**********************/
void sub1_print()
{
printf("\t***************************\n");
printf("\t请选择套进行的操作:\n\n");
printf("\t1. 确定属性个数\n");
printf("\t2. 确定属性的类型\n");
printf("\t3. 修改记录\n");
printf("\t4. 显示记录\n");
printf("\t0. 向上\n");
printf("\t****************************\n\n");
cout<<"\t";
}
/******************子菜单1操作******************/
int sub1_fun()
{
sub1_print();
int sub1;
string cname,temp;
int x,y;
int flag1,flag2;
FILE *fp;
int count=0;
while(cin>>sub1)
{
switch(sub1){
case 0 : cout<<"\t是否要保存到文件?(Y/N)"<<endl<<"\t";
char c;
cin>>c;
if(c=='Y'||c=='y'){
if((fp=fopen("haha.txt","a"))!=NULL){
fprintf(fp,"\n\n\t%s\n","----------------------------------------------------");
for(int i=0;i<attr_no;i++)
{
char * s=&attr_name[i].s[0];
if(i==attr_no-1)fprintf(fp,"\t%s\n",s);
else fprintf(fp,"\t%s",s);
}
for(int i=0;i<attr_no;i++)
{
char * s=&attr_type[i].s[0];
if(i==attr_no-1)fprintf(fp,"\t%s\n",s);
else fprintf(fp,"\t%s",s);
}
fprintf(fp,"\t----------------------------------------------------\n");
for(int i=0;i<count;i++)
{
for(int j=0;j<attr_no;j++)
{
char * s=&array[i][j].s[0];
if(j==attr_no-1)fprintf(fp,"\t%s\n",s);
else fprintf(fp,"\t%s",s);
}
}
fclose(fp);
}
else cout<<"\t文件打开失败"<<endl;
}
return 0;break;
case 1 : cout<<"\t请输入属性的个数:"<<endl<<"\t";
cin>>attr_no;
cout<<"\t请输入各个属性的名字(每行一个):"<<endl;
for(int i=0;i<attr_no;i++)
{
cout<<"\t";
cin>>attr_name[i].s;
}
break;
case 2 : cout<<"\t请输入各个属性的类型(int 或者 char):"<<endl;
for(int i=0;i<attr_no;i++)
{
cout<<"\t"<<attr_name[i].s<<":";
cin>>attr_type[i].s;
}
break;
case 3 : cout<<"\n\t1. 加入记录"<<endl
<<"\t2. 删除记录"<<endl
<<"\t0. 向上"<<endl<<"\t";
int sel;
while(cin>>sel)
{
int flag=1;
switch(sel){
case 0 : flag=0;break;
case 1 : cout<<"\t输入记录"<<endl;
for(int i=0;i<attr_no;i++)
{
cout<<"\t"<<attr_name[i].s<<":";
cin>>array[count][i].s;
}
count++;
break;
case 2 : cout<<"\t请输入要删除记录的属性名和对应属性中记录的信息"<<endl;
cout<<"\t要删除记录的属性名:";cin>>cname;
cout<<"\t对应属性中记录的信息:";cin>>temp;
for(int i=0;i<attr_no;i++)
if(attr_name[i].s==cname){y=i;break;}
for(int i=0;i<count;i++){
if(array[i][y].s==temp){
x=i;
for(int j=0;j<attr_no;j++)
{
array[x][j].s=array[count-1][j].s;
}
count--;
cout<<"\t记录已移除"<<endl;
}
}
break;
default : break;
}
if(flag==0)break;
cout<<"\n\t1. 加入记录"<<endl
<<"\t2. 删除记录"<<endl
<<"\t0. 向上"<<endl<<"\t";
}
break;
case 4 : cout<<"\t1. 全部显示"<<endl
<<"\t2. 索引显示"<<endl;
int lookup;
cout<<"\t";
cin>>lookup;
switch(lookup){
case 1 : for(int i=0;i<attr_no;i++)
{
cout<<"\t"<<attr_name[i].s;
}
cout<<endl;
for(int i=0;i<attr_no;i++)
{
cout<<"\t"<<attr_type[i].s;
}
cout<<endl<<"\t-----------------------------------------------------"<<endl;
for(int i=0;i<count;i++)
{
for(int j=0;j<attr_no;j++)
{
cout<<"\t"<<array[i][j].s;
}
cout<<endl;
}
break;
case 2 : int x,y;
flag1=0;flag2=0;
cout<<"\t请输入要搜索记录的属性名和对应属性中记录的信息"<<endl;
cout<<"\t记录的属性名:";cin>>cname;
for(int i=0;i<attr_no;i++)
{
if(attr_name[i].s==cname){flag1=1;x=i;break;}
}
cout<<"\t对应属性中记录的信息:";cin>>temp;
if(flag1==1){
for(int i=0;i<count;i++)
{
if(array[i][x].s==temp){
for(int k=0;k<attr_no;k++)
{
cout<<"\t"<<attr_name[k].s;
}
cout<<endl;
for(int k=0;k<attr_no;k++)
{
cout<<"\t"<<attr_type[k].s;
}
cout<<endl<<"\t-------------------------------------------------"<<endl;
for(int j=0;j<attr_no;j++)
{
cout<<"\t"<<array[i][j].s;
}
cout<<endl;
flag2=1;
}
}
}
if(flag1==0||flag2==0)cout<<"\t记录不存在"<<endl;
cout<<endl;
break;
default : break;
}
break;
default : break;
}
sub1_print();
}
}
/******************子菜单2操作******************/
void sub2_fun()
{
FILE *fp;
if((fp=fopen("haha.txt","r"))!=NULL){
char ch;
while(!feof(fp)){
ch=fgetc(fp);
cout<<ch;
}
fclose(fp);
}
else cout<<"文件打不开"<<endl;
}
int main()
{
int menu;
menu_print();
while(1)
{ cin>>menu;
switch(menu){
case 0 : return 0;break;
case 1 : sub1_fun();
break;
case 2 : sub2_fun();
break;
default: cout<<"选择错误,请重新选择!"<<endl;
break;
}
menu_print();
}
system("pause");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -