⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data.cpp

📁 一个数据采集的软件,可以自定义表的属性多少和名称,带有删除的功能
💻 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 + -