中南大学C++课程设计
更新时间:2024-01-14 02:55:01 阅读量: 教育文库 文档下载
中 南 大 学
本科生课程设计(实践)任务书、设计报告
(计算机程序设计基础C++)
中南大学职工工资管理系
题 目 统
学生姓名及学号 指导教师 学 院 专业班级
### 樊广军
机电工程学院 ###
计算机基础教学实验中心
2015、7、6——2015、7、17
目录
1. 一年心得------------------------1 2. 系统需求分析-----------------------------2 3. 总体设计---------------------------------2 4. 详细设计--------------------------------3 5. 系统调试--------------------------------3 6. 结果分析-------------------------------5 7. 程序源代码-----------------------------5 8. 总结-----------------------------------20 9. 参考文献------------------------------20 10. MFC的实践与成果-------------------------20
C++程序设计实验报告
——中南大学职工工资管理系统
1. 一年心德
计算机程序设计基础C++这一课程在时间悄悄地流逝中已接近尾声了,感觉收获颇多。以前很少用计算机办公,只是将它当作一种娱乐工具。可如今意识到:计算机最大的用处就是解放人类。让我们的生活更加高效。当然,有这些收获,最重要的是有一个引路人,那就是老师您。在这里,对您一学年的教导,说声:谢谢。
二十七 页 第 一 页 共
2. 系统需求分析
2.1系统设计的目的与意义
现在的学校学生数量较多,各自所选课程,所修课程学分及成
绩不同。成绩管理系统应运而生。
2.2系统功能需求:
? 职工基本信息:为方便管理职工工资,编写一个职工工资管理系统软件。系
统记录必须包括职工姓名、职工编号;
? 职工工资的基本信息:基本工资、职务工资、岗位津贴、五险一金等; ? 数据的录入:如录入职工的基本信息,如姓名、ID; ? 数据的修改:如修改指定ID、或者指定姓名的职工信息; ? 数据的插入:插入某个职工信息;
? 数据的查询:如按ID查询、按姓名查询等;
? 数据的删除:如删除指定ID、或者指定姓名的职工信息
? 统计:(A)计算各项工资平均工资及总工资, (B)?统计符合指定条件(如职工
工资前三项之和在3000元以上、3000~2500元、2500~1000元)以内的工资职工人数及占总职工人数的百分比。(C)以表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。 ? 其他:可以根据自己的思路设计其他功能。
3. 总体设计
3.1系统功能分析
系统通过调用函数来实现职工信息录入、职工信息修改、职工信息删除、职工信息查询以及数据保存文件等功能。luru{}函数用于录入职工个人信息(如:姓名、ID、津贴、医疗保险、基本工资、岗位津贴、公积金);
search1{}函数用于按姓名查找职工;search2{}函数用于按照ID
查找职工信息;Average{}函数用于计算职工平均工资;shanchu{}函数用于删除个人数据;xiugai{}函数用于修改职工个人信息,工
二十七 页 第 二 页 共
资信息。主函数main()用于调用这些函数。
3.2系统功能模板划分与设计
本系统定义了Work类,还定义了诸多函数共同实现系统所需功能。
3.3系统功能模块图
姓名、ID 个人信息 添加信息 总工资及平均职工信息管理系统 值 按姓名或ID查询 综合显示 工资、其他 医保等社会福利 查询信息 删除信息 删除本职工的各项信息
4. 详细分析
4.1 工资的设计: 定义了一个浮点型变量用来存放工资,定义了设
置总收入和显示平均收入的函数。
4.2 职工信息类的设计: 该类定义了一个Work类类型的变量,
定义了一个字符数组用来存放职工姓名、ID、总收入和平均收入,定义了设置和显示私有成员的函数。
4.3 查找的设计: 定义了两个函数分别是Search1和Search2,
分别是指利用ID查找职工信息和利用姓名查找职工信息。
5. 系统调试
5.1运行界面
二十七 页 第 三 页 共
5.2职工信息录入
5.3显示职工信息
二十七 页 第 四 页 共
5.4职工信息查询
5.5职工信息删除
5.6计算显示总工资和平均工资
程序总共设计了四个类,满足了课题对类的要求,在设计的过程中,建立了
6. 结果分析
较为清晰的类层次,也利用了面向对象的方法以及C++的编程思想来完成系统的设计,做到了用文件存储学生成绩信息、从文件中读取职工工资信息信息、修改信息、查询信息、删除信息显示文件中存储的信息等要求。而且界面简洁,容易操作。
7. 程序源代码
#include
二十七 页 第 五 页 共
using namespace std; double sum,avarage; int amount=0;
int ab=0,cd=0,ef=0; ofstream *file[50]; struct xinxi {
double jiben;//基本工资 double zhiwu;//职务工资 double gangwei;//岗位津贴 double yiliao;//医疗保险 double gongji;//公积金 double sum;//总工资 double sum1;
double avarage;//平均工资 struct xinxi *next; };
class worker//职工信息类 {
public://公有成员函数 string name; string ID; double sum; double avarage; xinxi sc1;
class worker *next; };
void luru(worker *head); void search1(worker *head); void search2(worker *head); void xianshi(worker *head); void xiugai(worker *head); void chazhao(worker *head); void shanchu(worker *head); void tianjia(worker *head); void tongji(worker *head); void display();
void read(worker *head); void dakai(worker *head);
int main() {
二十七 页 第 六 页 共
system(\int x;
//bool flag2=0; /*do {
do {
cin>>x;
if(x>=0&&x<=10) flag2=1; else {
cout<<\指令错误!!!~~~~~~~~~~\ cout<<\请选择相应数字进行操作\ } }
while(flag2==0)*/ worker *head=new worker; head->next=NULL; while(1) { display(); cin>>x;
if(x==1) {
cout<<\现在进行职工数据的录入*****************\\n\ luru(head);
cout<<\输入的职工信息为:\\n\ xianshi(head);
display(); //break; }
else if(x==2) {
cout<<\现在进行职工数据的修改******************\\n\ xiugai(head); display();
//break; //按姓名修改 }
else if(x==3) {
cout<<\现在进行所有职工信息的显示*****************\\n\ xianshi(head); display();
二十七 页 第 七 页 共
//break; //显示数据 }
else if(x==4) {
char z;
cout<<\现在进行所有职工信息查找**************\\n\ cout<<\请选择查询方式\\n\
cout<<\姓名查询方式 (2).ID查询方式\\n\ cin>>z;
while(z!='1'&&z!='2') {
cout<<\指令错误********************\\n\ cout<<\姓名查询方式 (2).ID查询方式\\n\ cin>>z; }
switch(z) {
case '1': search1(head);break;//按姓名查询 case '2': search2(head);break;//按学号查询 }
display(); // break; }
else if(x==5) {
cout<<\现在进行指定的职工信息的删除*****************\\n\ shanchu(head); xianshi(head); display();
//break; //删除 }
else if(x==6) {
cout<<\现在进行指定的职工信息的添加******************\\n\ tianjia(head); xianshi(head); display(); break;//添加 }
else if(x==7) {
cout<<\现在进行指定的职工信息的统计
二十七 页 第 八 页 共
***************\\n\ tongji(head); display(); // break; }
else if(x==8) {
cout<<\现在进行指定的职工信息的保存************\\n\ read(head); display(); // break; }
else if(x==9) {
cout<<\现在进行指定的职工信息的打开****************\\n\ dakai(head); display(); // break; } else {
cout<<\╔═══════════════════════════╗\\n\
cout<<\║ 您已退出职工管理系统, 谢谢您的使用! ║\\n\
cout<<\╚═══════════════════════════╝\\n\
cout< void display() { cout<<\╔═══════════════════════════╗\ cout<<\║ ☆ 中南大学职工工资管理系统 ☆ ║\ cout<<\║═══════════════════════════║ 二十七 页 第 九 页 共 \ cout<<\║ ║\ cout<<\║ (1)职工数据的录入 ║\ cout<<\║ (2)职工数据的修改 ║\ cout<<\║ (3)显示职工信息 ║\ cout<<\\ cout<<\\ cout<<\\ cout<<\\ cout<<\\ cout<<\\ cout<<\ cout<<\\ cout<<\\ cout<<\\ cout<<\\ cout<<\\ cout<<\\ cout<<\\ cout<<\\ cout<<\\ cout<<\\ cout<<\ ║ (4)查询职工信息 ║║ --(1)按姓名查询 ║║ --(2)按ID查询 ║║ --统计总工资和平均公资 ║║ (5)职工信息的删除 ║║ (6)职工信息的添加 ║ (7)职工信息的统计 ║\║ (8)保存职工信息 ║║ (9)打开职工信息 ║║ 退出程序 ║║ ║║═══════════════════════════║║注:请输入相应括号里的阿拉伯数字来执行相关操作! ║║ 要保存数据请先建立好指定文件: ║║ (D:\\\\职工管理系统\\\\职工信息.txt) ║ ╟------------------------------------------------------╢║编写人员: 机械设计及其自动化1313班 姚文彬 0806120215 ║║编写人员: 机械设计及其自动化1313班 黄本阳 0814120111║ 第 十 页 共 二十七 页 ║ \ cout<<\║ ║\ cout<<\ ║===================谢谢您的使用=======================║\ cout<<\╚═══════════════════════════╝\ cout<<\→请选择相应的数字进行操作: \} void xianshi(worker *head) { worker *work=head->next; cout<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\ while(work!=NULL) { cout<<\cout<<\ cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\cout<<\work=work->next; } system(\} void read(worker *head) { char a; worker *work=head->next; cout<<\现在保存输入职工数据,是否继续操作?(y/n)\ cin>>a; ofstream outfile(\职工管理系统\\\\职工信息.txt\ if(! outfile) { cout<<\打开文件错误!!!!!!!\\n\ cout<<\要保存数据请先建立好指定文件:D:\\\\职工管理系统\\\\职工信息.txt!!!\\n\ exit(0); 第 十一 页 共 二十七 页 } while(a!='n') { while(work!=NULL) { outfile<<\第\个职工的数据:***************\\n\ outfile<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\ outfile<<\职工信息: \\n\<<\| \| \| \\| \| \<<\<<\< work=work->next; } break; } cout<<\成功将学生数据保存到<职工信息.txt>中! \ outfile.close(); } void dakai(worker *head) { worker *work=head->next; ofstream ofile(\职工管理系统\\\\职工信息.txt\ work=work->next; } void luru(worker *head)//添加职工信息 { char c; int j=0; worker *p=head; file[j]=new ofstream(\职工管理系统\\\\职工信息.txt\ do { worker *work=new worker; cout<<\请输入姓名:\ cin>>(*work).name; cout<<\请输入ID:\ cin>>(*work).ID; cout<<\请输入基本工资:\ cin>>(*work).sc1.jiben; cout<<\请输入职务工资:\ 第 十二 页 共 二十七 页 cin>>(*work).sc1.zhiwu; cout<<\请输入岗位津贴:\ cin>>(*work).sc1.gangwei; cout<<\请输入医疗保险:\ cin>>(*work).sc1.yiliao; cout<<\请输入公积金:\ cin>>(*work).sc1.gongji; (*work).sc1.sum=(*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.yiliao+(*work).sc1.zhiwu+(*work).sc1.jiben; (*work).sc1.avarage=((*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.yiliao+(*work).sc1.zhiwu+(*work).sc1.jiben)/5; (*work).sc1.sum1=(*work).sc1.gangwei+(*work).sc1.zhiwu+(*work).sc1.jiben; if((*work).sc1.sum1>=2000) ab++; if((*work).sc1.sum1>=1500&&(*work).sc1.sum1<2000) cd++; if((*work).sc1.sum1>=1000&&(*work).sc1.sum1<1500) ef++; work->next=p->next; p->next=work; amount++; cout<<\数据录入成功,想继续录入吗(y/n)\ p=p->next; while(c!='y'&&c!='n') { cout<<\指令错误<请输入y/n!>!!!!!!!!!!\ cout<<\数据录入成功,想继续录入吗(y/n)\ cin>>c; } }while(c=='y'); j++; cout<<\输入了 \个职工的信息.\} void search1(worker *head) { char c; string name; do{ worker*work=head->next; bool flag=0; cout<<\请输入要查找的职工的姓名:\ cin>>name; do{ 第 十三 页 共 二十七 页 if(work!=NULL&&name==(*work).name) { flag=1; cout<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ } work=work->next; }while(work!=NULL); if(flag==0) cout<<\对不起!您要查询的职工不存在!!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\while(c!='y'&&c!='n') { cout<<\指令错误<请输入y/n!>!!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\ } }while(c=='y'); } void search2(worker *head) { char c; string ID; do{ worker *work=head->next; int flag=0; cout<<\请输入要查找职工的ID\cin>>ID; do{ if(work!=NULL&&ID==(*work).ID) { flag=1; cout<<\你要查询的学生是\ 第 十四 页 共 二十七 页 cout<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ } work=work->next; }while(work!=NULL); if(flag==0) cout<<\对不起!您要查询的职工不存在!!!!!!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\ cin>>c; while(c!='y'&&c!='n') { cout<<\指令错误<请输入y/n!>!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\ cin>>c; } }while(c=='y'); } void xiugai(worker *head) { string name; char c; do { bool flag2=0; worker *work=head->next; xinxi sc1; cout<<\请输入你要修改的职工的姓名:\cin>>name; do{ if(name==(*work).name) { flag2=1; cout<<\请输入新的基本工资:\ 第 十五 页 共 二十七 页 cin>>sc1.jiben; cout<<\请输入新的职务工资:\ cin>>sc1.zhiwu; cout<<\请输入新的岗位津贴:\ cin>>sc1.gangwei; cout<<\请输入新的医疗保险:\ cin>>sc1.yiliao; cout<<\请输入新的公积金:\ cin>>sc1.gongji; (*work).sc1.jiben=sc1.jiben; (*work).sc1.zhiwu=sc1.zhiwu; (*work).sc1.gangwei=sc1.gangwei; (*work).sc1.sum=(*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.jiben+(*work).sc1.yiliao+(*work).sc1.zhiwu; (*work).sc1.avarage=((*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.jiben+(*work).sc1.yiliao+(*work).sc1.zhiwu)/5; cout<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\数据修改成功......\ break; } work=work->next; }while(work!=NULL); if(flag2==0) { cout<<\对不起!您要修改的职工不存在!请检查重新输入!!!!!\} cout<<\想继续修改吗?(y/n)\ cin>>c; if(c!='y'&&c!='n') { 第 十六 页 共 二十七 页 cout<<\指令错误!请重新输入 }while(c=='y'); } void shanchu(worker *head) { char c; string no; do{ int flag=0; cout<<\请输入要删除的职工ID\ cin>>no; worker *p,*q; q=head; while(q->next!=NULL&&q->next->ID!=no) q=q->next; if(q->next!=NULL) { flag=1; p=q->next; q->next=q->next->next; amount--; free(p); cout<<\成功删除! \ } if(flag==0) cout<<\对不起!您要删除的职工不存在!!!!!!!!!\ cout<<\您想继续删除吗?(y/n)\ cin>>c; while(c!='y'&&c!='n') { cout<<\指令错误<请输入y/n!>!!!!!!!!!!!!\ cout<<\您想继续删除吗?(y/n)\ cin>>c; } }while(c=='y'); } void tongji(worker *head) { char c; string name; do 第 十七 页 共 二十七 页 { worker *work=head->next; bool flag=0; cout<<\总工资和平均工资的计算------\ cout<<\请输入要统计职工的姓名\ cin>>name; do{ if(work!=NULL&&name==(*work).name) { flag=1; cout<<\基本工资|职务工资|岗位津贴|医疗保险|公积金|总工资|平均工资|\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\ cout<<\超过2000的百分比:\ cout<<(ab*100)/amount<<\ cout<<\小于2000,大于等于1500\ cout<<(cd*100)/amount<<\ cout<<\小于1500,大于等于1000\ cout<<(ef*100)/amount<<\ } work=work->next; }while(work!=NULL); if(flag==0) cout<<\对不起!您要查询的职工不存在!!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\ while(c!='y'&&c!='n') { cout<<\指令错误<请输入y/n!>!!!!!!!!!!!\ cout<<\您想继续查询吗?(y/n)\ } } while(c=='y'); } void tianjia(worker *head) { 第 十八 页 共 二十七 页 char c; int j=0; worker *p=head; file[j]=new ofstream(\职工管理系统\\\\职工信息.txt\ do { worker *work=new worker; cout<<\请输入姓名:\ cin>>(*work).name; cout<<\请输入ID:\ cin>>(*work).ID; cout<<\请输入基本工资:\ cin>>(*work).sc1.jiben; cout<<\请输入职务工资:\ cin>>(*work).sc1.zhiwu; cout<<\请输入岗位津贴:\ cin>>(*work).sc1.gangwei; cout<<\请输入医疗保险:\ cin>>(*work).sc1.yiliao; cout<<\请输入公积金:\ cin>>(*work).sc1.gongji; (*work).sc1.sum=(*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.yiliao+(*work).sc1.zhiwu+(*work).sc1.jiben; (*work).sc1.avarage=((*work).sc1.gangwei+(*work).sc1.gongji+(*work).sc1.yiliao+(*work).sc1.zhiwu+(*work).sc1.jiben)/5; (*work).sc1.sum1=(*work).sc1.gangwei+(*work).sc1.zhiwu+(*work).sc1.jiben; if((*work).sc1.sum1>=2000) ab++; if((*work).sc1.sum1>=1500&&(*work).sc1.sum1<2000) cd++; if((*work).sc1.sum1>=1000&&(*work).sc1.sum1<1500) ef++; work->next=p->next; p->next=work; amount++; cout<<\数据添加成功,想继续添加吗(y/n)\ p=p->next; while(c!='y'&&c!='n') { cout<<\指令错误<请输入y/n!>!!!!!!!!!!\ cout<<\数据添加成功,想继续添加吗(y/n)\ cin>>c; } 第 十九 页 共 二十七 页 }while(c=='y'); j++; cout<<\输入了 \个职工的信息.\} 8. 总结: 设计之初,觉得小型职工工资管理系统比较好设计。开始发现整个程序的设计思路不太明了。理思路花了很长时间,弄清楚了是要分查询,删除和添加三个方面去这个程序比较靠谱,能够较好的满足程序需要。其次,就该考虑程序算法的问题了,一个好的算法是一个好程序的灵魂,也决定了一个程序的质量。 两个星期的课设虽然有些疲劳和困倦,但带给我很多的收获。C++已经学了一个学期了,有许多知识都存在似懂非懂的现象(比如,系统中关于职工信息和工资情况的配套是动态的,无法直接设定;在平均成绩排序中要运动冒泡法;对于模板和头文件也有了较多的认识。)这种现象通过实际的上机操作,已经减少了许多。对这些知识也有了更深的理解和很好的掌握。也有很多理论上说得过去的代码,但到了实际操作,却是行不通的。这种困惑,有许多已经通过实际操作解决了,并能够深刻认识,但也有很多没有明白。只能避过这些方法,换方法实现。在课程设计之前,因为有了综合实验的经验与教训,明白了写代码这一步是非常重要的,因为当你把代码输入电脑,并用编译器将其运行,发现通过不了,再来检查找出问题,这是一件非常辛苦的事情,也很浪费时间。于是在课程设计的时候,我花了四天的时间来规划与写代码,将要实现的内容分析清楚,才把代码输入电脑。我觉得写程序,应该先找到该程序中的核心地方,用多种方法来实现该核心,这才可能避免等到发现逻辑上或者编译器不支持上的错误,才来想补救的措施,这样花费时间在想补救措施是很不值得的。 而且,一学期下来的课本上的内容并不能满足我们对于编程的全部需要,C++中还有很多精髓部分我们并没有学到。本次课设中遇到的重重困难坚定了我学号C++的信心! 9. 参考文献 ① C++程序设计(第2版) 谭浩强编著 清华大学出版社 ② Visual C++6.0 10. MFC的实践与成果 实践过程中,老师也讲述了MFC编程的WINDOWS界面的程序。本来打算编程出来一个的,但是由于好多地方不是很明白,所以只编译出来几个小的程序。而将小程序链接在一起的方法试了许多次都已失败告终。在这里只展示一些单独的小程序。 复制 第 二十 页 共 二十七 页 信息录入 函数计算 共 二十七 页 第 二十一 页 字母大小写转换 课程添加与删除 共 二十七 页 第 二十二 页 信息选择填入 显示时间日期 共 二十七 页 第 二十三 页 信息选择添加 共 二十七 页 第 二十四 页 中 南 大 学 C++程序设计基础 课程设计成绩表 姓名 姚文彬 指导教师:_樊广军_ _2014_年_7_月_5_日 班次 机械1313班 学号 0806120215 成绩 共 二十七 页 第 二十五 页
正在阅读:
中南大学C++课程设计01-14
第3节 原生动物与微型后生动物04-22
暖通空调文献综述12-04
物理内存和虚拟内存是什么意思?02-09
水浒传各人物绰号及其由来11-25
怎么考察除甲醛加盟公司?重点看哪些方面?02-28
乡镇20xx年农业半年工作总结02-26
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 中南大学
- C++
- 课程
- 设计
- 南开14春学期《大学英语(三)》在线作业答案
- 文秘知识基础模拟试题及答案
- 考博联系导师邮件
- 汽车销售公司的岗位说明书 - 图文
- 特高压输电系统及其关键技术
- 采掘机电类各工种操作规程(最终版)(1)
- 精心搜集整理的辅导员笔试试题(打印版)
- 读书心得 大学生图书馆 借阅感悟
- 新编剑桥商务英语高级第三版 第11.2+11.3
- 9、爱岗敬业,立足岗位成才 - 图文
- 5-1-孟津县常袋镇中心校少年宫管理制度、活动项目、经费保障、专兼职辅导员等方面的情况说明报告
- 财预230号关于印发《中央对地方专项转移支付管理办法》的通知
- 科目三路考
- 小学少年宫经典诵读活动总结
- 职业英语技能(中级)试卷及答案
- 药理学名词解释重点(小抄)
- 第一章基础知识测试题
- 2013年物流师考试总复习内容概述每日一讲(11月7日)
- 中职英语第四册Unit 5 are IQ test intelligent - 图文
- 国家统计局网站所公布的20个行业分类标准