设计一基于框架专家系统的设计一、实验目的(1)通过本次综合设计,了解诊断咨询专家系统的基本原理与设计。(2)本实验旨在让学生对专家系统应用有一个初步的理解,增强学生的程序编写能力。二、实验设备及条件C语言三、实验原理及内容框架是一种表示概念或对象地一成不变知识的数据结构。在这个结构或组织中,新的资料可以用过去经验中得到的概念来分析和解释。框架通常采用语义网络中的节点-槽-值来表示结构。基本要求:1.汽车框架专家系统的设计,2.包括概念汽车和至少2个实例汽车,3.有继承性(和异常处理)功能,4.给出可使用汽车的结果,5.给出程序设计框图、源程序和系统运行结果。四、实验步骤1)考虑下面两个表示“汽车”概念和“我的汽车”有关实例的框架实例,如表1所示。表1框架实例概念→实例汽车→我的汽车日期:未知→日期:1957生产商:未知→生产商:红旗颜色:未知→颜色:红色轮子:4→轮子:4启动:Procedure1→启动:Procedure1“汽车”框架列举出“所有”汽车的主要特征。大多数特征都是一般化的,因此它们的值在框架中都是未知的。但是,大多数汽车有4个轮子,因此在“汽车”框架中将这一点设置为默认值更恰当。另外,启动任何汽车都要遵循一些设定程序,如按点火键、供气等。这一系列的任务在一些过程中实现,如Procedure1,并添加到“汽车”框架中。“我的汽车”框架表示“汽车”框架的实例。它从“汽车”框架上继承其特征和默认值。但是,它也有我的汽车特定的特征值。具有从一般性框架继承信息的实例框架,是基于框架的专家系统的优良特征之一。2)在vc++建立新的工程:分别按照框架实例进行定义:五、思考题#includestdio.h#includeconio.h#includestdlib.hvoidinput();voidsort();voiddisplay();voidinsert();voidmodify();intcount=0;structcar{charname[20];//车名charmodel[20];//车型charcolor[20];//颜色intcost;//单位进价intprice;//单位售价inttotal;//库存车辆总数intprofit;//利润intnum;//卖车数量intstock;//卖车之后的库存数量};structcarinfo[50];voidaddrecord(){inti=0;charc_pd;//pd为判断是否还要继续输入FILE*fp;//打开文件if((fp=fopen(c:\\database\\database.txt,a))==0){printf(Cannotopenfile!);exit(0);}//以二进制读写的形式创建一个保存文件do{printf(pleaseenterarecord:\n);printf(thecaris'name,number,UnitCost,SellingPrice,color':\n);scanf(%s,%d,%d,%d,%s,,info[i].name,info[i].num,info[i].cost,info[i].price,info[i].color);//输入汽车信息count++;fwrite(&info[i],sizeof(info),50,fp);//存入文件中printf(continueenter?yesenter'y';noenter'n'\n);//是否继续输入号码记录fflush(stdin);//清空缓存scanf(%c,&c_pd);if(c_pd=='y')i++;}while(c_pd=='y');fclose(fp);}voidmain()/*主函数*/{intselect;/*功能选择模块*/do{printf(\n\t\t\t\t1.Displaythelistofallcarrecord\n);printf(\t\t\t\t2.Addanewrecord\n);printf(\t\t\t\t3.Modifyanexistingrecord\n);printf(\t\t\t\t4.SalesandProfits\n);printf(\t\t\t\t5.Sortthelistofcarinalphabeticorder\n);printf(\t\t\t\t6.Quit\n);printf(\t\t\t\t7.查询学生信息\n);printf(\t\t\t\t8.退出\n);printf(\t\t\t\tEnteryourchoice:);scanf(%d,&select);switch(select){case1:system(cls);//显示所有输入车display();break;case2:system(cls);//添加一个新的输入insert();break;case3:system(cls);//修改当前显示记录modify();break;case4:system(cls);//显示车型库存量每类车销售数量每类车销售总价每类车利润各类车的利润总和insert();break;case5:system(cls);//按字母顺序排列车名sort();break;case6:system(cls);//数据储存到之前的那个file里modify();break;case7:system(exit);//exit(0);default:system(cls);}}while(2);/*至此功能选择结束*/display()/*显示数据函数*/{inti;charch;//printf(%d,count);do{printf(\t\t\tCarinformation\n);printf(\tname\tnumber\tUnitCost\tsellingprice\tcolor\n);for(i=0;icount;i++){printf(%s\t%d\t%d\t%d\t%s,,info[i].name,info[i].num,info[i].cost,info[i].price,info[i].color);}printf(\t\t按任意键返回主菜单.);ch=getch();}while(!ch);}insert()/*插入数据函数*/{inti=0;charch='y';do{printf(\n\t\enternewcarinformation\n);scanf(%s,%d,%d,%d,%s,,info[i].name,info[i].num,info[i].cost,info[i].price,info[i].color);printf(\n);count=count+1;sort();printf(\n是否继续输入?(Y/N));ch=getch();system(cls);}while(ch!='n'&&ch!='N');}modify()/*修改数据函数*/{inti;charname;printf(Entercarname:);scanf(%d,&name);for(i=0;icount;i++)if(name==info[i].name){printf(\n\t\tmodifyinformation\n);printf(\n\t\enternewcarinformation\n);scanf(%s,%d,%d,%d,%s,,info[i].name,info[i].num,info[i].cost,info[i].price,info[i].color);printf(\n);sort();break;}system(cls);}Profits(){inti;charch;//printf(%d,count);do{printf(\t\t\tCarinformation\n);printf(\tname\tnumber\tUnitCost\tsellingprice\tcolor\n);for(i=0;icount;i++){intTotal=0;Total=info[i].num*(info[i].price-info[i].cost)+Total;info[i].profit=info[i].num*(info[i].price-info[i].cost);info[i].stock=info[i].total-info[i].num;printf(name%s\tsellingnumber%d\tunitcost%d\tnumberofstock\tsellingprice%d\tcolor%s\t%d,,info[i].name,info[i].num,info[i].cost,info[i].stock,info[i].price,info[i].color,info[i].profit);}printf(Totalprofit%d:,Total);printf(\t\t按任意键返回主菜单.);ch=getch();}while(!ch);}voidsort()/*排序数据函数*/{structcarinfo;chartemp[20];inti,j;for(i=1;icount;i++){for(j=1;j=count-i;j++){if((strcmp(info[i].name,info[j].names)){strcpy(temp,info[i].name);strcpy(info[i].name,info[j].name);strcpy(info[i].name,temp);}printf(\nThesortedlistinalphabeticalorderis:\n);for(i=0;i6;i++)printf(%s\n,info[i].name);}}display();}六、实验心得本次试验有一定的难度,关键是程序的理解不是很透彻,看来除了老师在课上讲的之外,还需要自己在课后的努力。