C语言课程设计_软件园企业信息管理系统_三向十字交叉链表
- 格式:doc
- 大小:567.50 KB
- 文档页数:60
C语言程序课程设计报告标题:图书管理系统专业:软件工程类:设计主题图书馆管理系统主要包括管理图书的库存信息,每本书的借阅信息,每个人的借阅信息。
每本书的库存信息包括数量、书名、作者、出版日期、金额、类别、总入库数量、当前库存、已借出图书数量等。
每本借书包括以下信息:编号、书名、金额、借书证号、借阅日期、到期日期、罚款金额等。
每个人的图书馆信息包括借书证号、班级、学号等。
该系统的功能包括以下几个方面:一、借阅资料管理要求对图书、期刊、报纸、期刊进行分类管理,这样操作会更加灵活方便。
可以随时添加、删除、修改、查询等相关资料。
b、借贷管理(1)借贷操作(2)还书操作(3)更新治疗提示:以上处理需要相互配合,通过编辑赔偿和违约金金额来完成图书借还业务的各种登记。
例如,读者在还书时,不仅要更新图书的库存信息,还要自动计算图书的罚款金额。
并显示读者当天到期未还图书的所有信息。
c、读者管理读者等级:对借阅的读者进行分类,比如可以分为教师和学生两类。
并定义每类读者可以借阅的图书数量及相关借阅时间等信息。
读者管理:可以录入读者信息,以及挂失或注销读者、查询等服务。
D.统计分析可以随时进行统计分析,及时了解当前的借阅情况和相关数据状态。
统计分析包括借阅列表、数据状态统计、借阅统计等功能分析,显示当日所有到期未还的图书信息。
e系统参数设置:您可以设置相关的系统服务器参数,如违约金金额、最大借用天数等。
根据题目分析这项工作分为六个模块。
1.图书数据2.借款人信息3.借用模块4.还书模块5.照看书籍6.查询模块模块一:书号,书名,作者,出版时间,价格,份数,页数。
模块二:单位、借阅书目、借阅时间模块3:输入书名、书号、借书证。
模块四:登记书号,还书,处理罚款。
模块5:管理书库中的书籍,将新书入库,删除旧书,堆栈查询模块6:图书查询。
数据测试源代码汉字菜单可以参照以下代码编写:#包含“stdio.h”。
主(){ char c;int I;做{clr SCR();for(I = 0;i < 80i++)printf(" * ");printf("\t 1:添加书籍\ n ");printf("\t 2:列出书籍\ n ");printf(" \ t 3:s reach books \ n ");printf("\t 4:借书\ n ");printf("\t 5:返回图书\ n ");printf("\t6:退出\n ")printf(" \ t请选择输入选项[1 \ \ 2 \ \ 3 \ \ 4 \ \ 5 \ \ 6]:\ n ");做{c = getchar();}while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&!='6');getchar();开关(c){事例“1”:输入();打破;案例“2”:del();打破;事例“3”:find();打破;case“4”:arrange();打破;事例“5”:right();打破;案例“6”:出口(0);}Printf("按任意键返回主菜单:\ n ");getchar();clr SCR();} while(1);}#include <stdio.h >定义图书结构*/结构书{int _ id#include <stdlib.h >#include <string.h >#定义借入1#定义NOBORROW 0/*//数字,唯一char _ name[32];//书的名称,不唯一int _ type//书的类型,不唯一int _ status//书的状态,借出/未借出int _ count//图书借出的次数struct Book * _ next//下一本书结构书* _ prev//前一本书};定义书籍类型*/操作目录提示*/操作目录提示1 */添加图书类型并显示用户信息*/添加图书状态并显示用户信息。
c语⾔实现通讯录管理系统(⽤链表实现)题⽬:通讯录(通过链表实现)设计并实现⼀个简易的通讯录软件,管理个⼈通讯记录。
⼀条通讯记录可包括:姓名、⼯作单位、⼿机、住宅电话、E-Mail、家庭住址等(可⾃⾏增删,但不可过少)。
该系统应实现以下基本功能:(1)增加新的通讯记录。
(2)删除已有的通讯记录。
(3)修改已有的通讯记录。
(4)浏览全部或指定(如指定姓名、⼯作单位等)的通讯记录。
(5)合理组织排列各项功能,界⾯可使⽤键盘操作。
(6)以⽂件的形式存储数据。
说明:⼤⼀时的c语⾔课设,⽤链表实现⼀个通讯录管理系统,为了美观好看,花了很多时间调整齐度,记录⼀下⼤⼀时的作业。
其主要功能是对通讯录可输⼊,显⽰,插⼊,删除,最难是可保存,这个学⽂件的时候不怎么会。
内容我⾃⼰弄了7个,名字,性别,⼯作单位,⼿机,住宅电话,E-Mail,家庭住址(其他太多其实都是⼀样的,就懒得加了)。
主要运⽤到对指针中的链表的功能和使⽤要⽐较扎实,分部列写就可以了。
实现图⽚:附上代码:1 #include <stdio.h>2 #include <string.h>3 #include <stdlib.h>4 typedef struct student5 {6char name[20];//名字7char wm[20];//性别8char work[100];//⼯作单位9char stel[20];//⼿机10char htel[20];//住宅号码11char mail[20];//E-Mail12char home[100];//家庭住址13struct student *next;14 }stu;15 stu *head;//头指针16void screen()//主菜单17 {18 printf("\n=======================================================\n");19 printf(" 欢迎来到通讯录管理系统\n\n");20 printf(" 1.输⼊数据 2.显⽰数据\n");21 printf(" 3.插⼊数据 4.删除数据\n");22 printf(" 5.查看数据 6.修改数据\n");23 printf(" 7.保存数据 8.返回主菜单\n");24 printf("\n~~~~~~输~~~~~~⼊~~~~~~9~~~~~~退~~~~~~出~~~~~~程~~~~~~序\n");25 }26void input()//输⼊数据27 {28int ans;//判断是否继续输⼊29 stu *p1,*p2;30 p1=(stu *)malloc(sizeof(stu));//申请内存来⽤31if(p1!=NULL)32 {33 printf("========输⼊数据========\n");34 head=p1;35while(1)36 {37 printf("名字:");38 scanf("%s",&p1->name);39 printf("性别:");40 scanf("%s",&p1->wm);41 printf("⼯作单位:");42 scanf("%s",&p1->work);43 printf("⼿机:");44 scanf("%s",&p1->stel);45 printf("住宅号码:");46 scanf("%s",&p1->htel);47 printf("E-Mail:");48 scanf("%s",&p1->mail);49 printf("家庭地址:");50 scanf("%s",&p1->home);51 printf("===================================\n");52 p2=p1;53 p1=(stu *)malloc(sizeof(stu));//申请下⼀个要⽤的空间54if(p1!=NULL)55 p2->next=p1;56 printf("请选择是否继续输⼊:1.继续 2.退出\n请选择:");//⽤户选择57 scanf("%d",&ans);58if(ans==1)//继续59continue;60else//退出61 {62 printf("========输⼊完毕========\n");63 p2->next=NULL;64free(p1);//将申请的的⽆⽤内存释放65break;66 }67 }68 }69 }70void look(stu *p1)//显⽰数据71 {72 printf("========显⽰数据========\n");73while(p1!=NULL)74 {75 printf("名字:%s\n",p1->name);76 printf("性别:%s\t",p1->wm);77 printf("⼯作单位:%s\t",p1->work);78 printf("⼿机:%s\t",p1->stel);79 printf("住宅号码:%s\t",p1->htel);80 printf("E-Mail:%s\t",p1->mail);81 printf("家庭住址:%s\n",p1->home);82 printf("=====================================\n");83 p1=p1->next;84 }85 printf("========显⽰完毕========\n");86 }87void insert()//插⼊数据88 {89int ans;//选择插⼊位置90char name[20];//插⼊者的名字91 printf("========插⼊数据========\n");92 stu *p1,*p2,*p3;93 p1=head;94 p3=(stu *)malloc(sizeof(stu));//申请内存95 p3->next=NULL;96 printf("请输⼊插⼊者的数据:\n");97 printf("名字:");98 scanf("%s",&p3->name);99 printf("性别:");100 scanf("%s",&p3->wm);101 printf("⼯作单位:");102 scanf("%s",&p3->work);103 printf("⼿机:");104 scanf("%s",&p3->stel);105 printf("住宅号码:");106 scanf("%s",&p3->htel);107 printf("E-Mail:");108 scanf("%s",&p3->mail);109 printf("家庭地址:");110 scanf("%s",&p3->home);111 printf("请选择插⼊位置:1.⾸位置插⼊ 2.尾部插⼊ 3.插到某⼈前⾯\n请选择:");112 scanf("%d",&ans);113switch(ans)114 {115case1://放到头指针116 p3->next=p1;117 head=p3;118break;119case2://放到尾部120while(p1->next!=NULL)121 p1=p1->next;122 p1->next=p3;123break;124case3://放到某⼈前⾯125 printf("请输⼊插到谁前⾯名字:");126 scanf("%s",name);127while(strcmp(name,p1->name)!=0)128 {129 p2=p1;130 p1=p1->next;131 }132 p2->next=p3;133 p3->next=p1;134break;135 }136 printf("========插⼊成功========\n");137 }138void deleted()//删除数据139 {140 stu *p1,*p2;141char name[20];//删除者名字142 printf("========删除数据========\n");143 printf("请输⼊要删除者的名字:");144 scanf("%s",name);145 p1=head;146if(head==NULL)//通讯录已经没数据了147 {148 printf("通讯录⾥什么也没有了。
数据结构C语言版实验报告一、实验目的本次实验旨在通过使用 C 语言实现常见的数据结构,加深对数据结构基本概念、原理和操作的理解,提高编程能力和解决实际问题的能力。
二、实验环境操作系统:Windows 10编程环境:Visual Studio 2019编程语言:C 语言三、实验内容1、线性表顺序表的实现与操作链表的实现与操作2、栈和队列栈的实现与应用(表达式求值)队列的实现与应用(模拟排队)3、树和二叉树二叉树的遍历(前序、中序、后序)二叉搜索树的实现与操作4、图图的存储结构(邻接矩阵、邻接表)图的遍历(深度优先搜索、广度优先搜索)四、实验步骤及结果1、线性表顺序表的实现与操作定义顺序表的数据结构,包括数组和表的长度。
实现顺序表的初始化、插入、删除、查找等操作。
测试顺序表的各种操作,输出操作结果。
```cinclude <stdioh>include <stdlibh>define MAX_SIZE 100typedef struct {int dataMAX_SIZE;int length;} SeqList;//初始化顺序表void initList(SeqList L) {L>length = 0;}//插入元素到顺序表int insertList(SeqList L, int pos, int element) {if (L>length >= MAX_SIZE || pos < 0 || pos > L>length) {return 0;}for (int i = L>length 1; i >= pos; i) {L>datai + 1 = L>datai;}L>datapos = element;L>length++;return 1;}//删除顺序表中的元素int deleteList(SeqList L, int pos) {if (pos < 0 || pos >= L>length) {return 0;}for (int i = pos; i < L>length 1; i++){L>datai = L>datai + 1;}L>length;return 1;}//查找顺序表中的元素int searchList(SeqList L, int element) {for (int i = 0; i < Llength; i++){if (Ldatai == element) {return i;}}return -1;}int main(){SeqList L;initList(&L);insertList(&L, 0, 10);insertList(&L, 1, 20);insertList(&L, 2, 30);printf("顺序表元素: ");for (int i = 0; i < Llength; i++){printf("%d ", Ldatai);}printf("\n");int pos = searchList(L, 20);if (pos!=-1) {printf("元素 20 在顺序表中的位置: %d\n", pos);} else {printf("顺序表中未找到元素 20\n");}deleteList(&L, 1);printf("删除元素后的顺序表元素: ");for (int i = 0; i < Llength; i++){printf("%d ", Ldatai);}printf("\n");return 0;}```实验结果:成功实现顺序表的初始化、插入、删除、查找等操作,输出结果符合预期。
课程设计说明书学号:班级: 姓名:设计题目: 学生信息管理系统设计地点:设计时间: 至成绩评定:1、工作量: A(),B(),C(),D(),F( )2、难易度:A(),B(),C(),D(),F( )3、答辩情况:A(),B(),C(),D(),F( )4、报告规范度:A(),B(),C(),D(),F( )5、学习态度:A(),B(),C(),D(),F( )总评成绩:___________________________指导教师:___________________________一、设计题目与要求1、设计目的:编写一个学生信息管理系统,实现对学生信息的基本管理。
把所学数据结构知识应用到实际软件开发中去。
设计内容:本系统应完成一下几方面的功能:(1)增加一个学生的信息(需输入要增加学生的所有信息);(2)统计本班学生总人数及男女生人数。
(3)分别按照学号查找学生的信息;若找到则输出该学生全部信息,否则输出查找不到的提示信息。
(4)按学号对所有学生信息排序,并输出结果;(5)删除一个学生的信息(需指定要删除学生的学号);同时显示删除后的结果。
2、设计要求:(1)用菜单调用(2)作为一个完整的系统,应具有友好的界面和较强的容错能力(3)上机能正常运行,并写出课程设计报告二、概要设计1. 功能需求分析学生信息管理系统设计学生信息包括:学号,姓名,性别,出生年月,电话使之提供以下功能:1.系统以菜单方式工作2.插入新的学生信息3.删除某学号的学生信息4.查找某学号的学生信息5.对学生信息排序6.统计学生人数7.输出学生信息2 总体设计功能结构图设计依据程序的功能需求,描述该系统功能的结构图如下:图1 系统功能结构图模块简介依据程序的功能模块的划分,各模块定义如下:(1)增加学生信息模块名:void addstu(LinkList *&L)模块描述:通过此模块可以在学生链表中添加新的学生信息。
C语言选课管理系统课程设计一、教学目标本课程旨在让学生掌握C语言选课管理系统的开发方法,培养其编程能力和问题解决能力。
具体目标如下:1.知识目标:学生能够理解C语言的基本语法、数据结构和常用算法;掌握面向对象编程思想。
2.技能目标:学生能够使用C语言进行程序设计,独立完成选课管理系统的开发;具备调试和优化程序的能力。
3.情感态度价值观目标:培养学生对计算机科学的兴趣,使其认识到编程在实际应用中的重要性,提高其创新精神和团队合作意识。
二、教学内容本课程的教学内容主要包括C语言基础知识、数据结构、算法、面向对象编程和选课管理系统的设计与实现。
具体安排如下:1.C语言基础知识:介绍C语言的基本语法、变量、运算符、控制结构等。
2.数据结构:讲解数组、链表、栈、队列、树等基本数据结构及其应用。
3.算法:学习常用排序算法、查找算法、递归算法等,培养学生的算法思维。
4.面向对象编程:介绍类、对象、封装、继承、多态等基本概念,并学会使用面向对象的方法解决问题。
5.选课管理系统设计与实现:分析系统需求,设计系统架构,编写功能模块,完成系统集成。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法,以激发学生的学习兴趣和主动性。
1.讲授法:用于讲解基本概念、语法和算法,使学生掌握理论知识。
2.讨论法:学生针对案例进行分析,培养其问题解决能力和团队合作精神。
3.案例分析法:分析实际项目案例,使学生学会将理论知识应用于实际问题。
4.实验法:让学生动手编写代码,培养其编程能力和实践能力。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用权威、实用的教材,如《C程序设计原理与应用》、《C++ Primer》等。
2.参考书:提供相关领域的经典著作,如《算法导论》、《数据结构与算法分析》等。
3.多媒体资料:制作课件、教学视频等,丰富教学手段,提高教学质量。
4.实验设备:保证学生有足够的实践机会,提高其编程能力和实践能力。
学生信息管理系统设计案例一、引言学生信息管理系统是一种集学生信息录入、查询、修改和删除等功能于一体的软件系统。
为了满足学校对学生信息的有效管理和查询需求,本文将介绍一种用C语言实现的学生信息管理系统设计案例。
二、需求分析学生信息管理系统主要有以下几个功能模块: 1. 学生信息录入:包括学生姓名、学号、年龄、性别等基本信息的录入。
2. 学生信息查询:可以根据学号或姓名进行查询,并显示查询结果。
3. 学生信息修改:可以根据学号或姓名选择要修改的学生信息,并进行修改操作。
4. 学生信息删除:可以根据学号或姓名选择要删除的学生信息,并进行删除操作。
三、系统设计1. 数据结构设计为了存储学生信息,我们需要定义一个学生结构体,包括姓名、学号、年龄、性别等字段。
同时,为了方便管理学生信息,我们可以使用链表数据结构来存储学生信息,并设计一个头节点来指向链表的第一个节点。
struct student {char name[20];int student_id;int age;char gender[10];struct student* next;};struct student* head; // 头节点2. 功能模块设计2.1 学生信息录入在该功能模块中,用户需要输入学生的姓名、学号、年龄和性别等信息,并将该学生信息添加到链表中。
为了方便起见,我们可以将该功能模块定义为一个函数add_student()。
2.2 学生信息查询在该功能模块中,用户可以根据学号或姓名进行学生信息的查询。
查询结果将会显示学生的基本信息。
为了方便起见,我们可以将该功能模块定义为一个函数search_student()。
2.3 学生信息修改在该功能模块中,用户可以根据学号或姓名选择要修改的学生信息,并进行修改操作。
为了方便起见,我们可以将该功能模块定义为一个函数update_student()。
2.4 学生信息删除在该功能模块中,用户可以根据学号或姓名选择要删除的学生信息,并进行删除操作。
C#课程设计报告C#课程设计报告西南大学荣昌校区课程教学实习档案表系部信息管理系学生姓名郭生文专业计算机科学与技术学号2220xx602053011年级20xx级指导教师肖兴江信管系(部)制表二0一三年5月6日课程名称:C#课程设计实习周数:9(周)实习单位:西南大学(荣昌校区)实习地点:二教4楼(2405)实习时间:20xx/2/1420xx/5/7一、实习目的、要求:实习的目的:随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业人事管理势在必行。
对于大中型企业来说,利用计算机支持企业高效率完成劳动人事管理的日常事务,是适应现代企业制度要求、推动企业劳动人事管理走向科学化、规范化的必要条件;计算机管理所无法比拟的优点检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高人事管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
不同的企业具有不同的人事管理制度,这就决定了不同的企业需要不同的人事管理系统。
目前市面上流行的人事管理系统不少,但是,对于企、事业单位的人事管理系统来说,不需要大型的数据库系统。
只需要一个操作方便,功能实用,能满足本中心对数据的管理及需求的系统。
我们的目标就是在于开发一个功能实用、操作方便,简单明了的人事管理系统.能够录入人事的基本资料,在操作上能够完成诸如添加、修改、删除、按各种条件进行查询、新用户的设置及密码修改等方面的工作,基本满足人事日常业务的需要。
实习的要求:1.利用c#程序设计一个管理信息系统;2.掌握程序的规划与开发方法;3.进行程序的需求分析;4.进行程序的设计;5.进行程序的测试与维护;6.完成系统设计报告,并提交源程序。
二、实习主要内容:1.需求分析对人事管理系统进行需求分析,对市场进行调查,得出系统的可行性,对可行性进行分析,列出需要实现的功能,然后进行各个模块的分析,得出功能模块和各个模块之间的关系列表。
学生信息管理系统设计文档一、设计任务描述为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了“学生信息管理系统”软件,该软件适用于所有windows操作系统,面向广大用户,界面简洁,操作简单。
此软件主要是实现对学生学籍信息进行系统化的管理,可以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是根据学生的学号及其姓名进行操作的。
该软件可以更加方便管理者管理学生学籍信息。
二、功能需求说明该系统所需要的功能有:1、链表的建立;2、学生信息的插入;3、学生信息的查询;4、学生信息的输出;5、学生信息的修改;6、学生信息的删除;7、良好的欢迎选择界面。
三、总体方案设计一、实现任务的方法1、在欢迎选择界面中,使用Switch 这一选择结构来连接程序的执行和用户的命令;2、在从学生信息的建立直到删除,都是使用链表的相关知识;3、在定义学生信息时,建立一个Inform 类;在定义学生课程成绩时,自定义了一个achieve 结构体;二、总体结构三、模块划分(1)链表的建立。
(2)对链表信息的插入。
(3)对链表信息的查找。
(4)对链表信息的输出。
(5)对链表信息的删除。
(6)对链表信息的修改。
课程成绩信息作为附加信息,穿插于各个模块中。
三、数据结构说明一、自定义的数据结构:1、achieve(课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学分、总分和平均分。
2、inform(学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。
3、结点结构-Nodetype,定义了数据域inform和指针域next;二、类Student 用于存放处理学生信息的各个功能函数,private 成员是链表的头指针。
四、各模块设计说明一、建立:首先:建立一个空链表:Student::Student(){head=new Nodetype;head->next=NULL; 表明这是一个空链表cout<<"请建立链表\n";}然后建立链表:二、添加:按照学号从小到大的顺序插入:三、输出:将链表的数据输出,由于上述操作,输出时会按照学号从小到大的顺序输出。
课程信息管理系统c语言课程设计一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握课程信息管理系统C语言的基本概念、原理和编程方法;技能目标要求学生能够运用C语言进行简单的程序设计和调试;情感态度价值观目标要求学生培养良好的编程习惯和团队合作精神。
通过本课程的学习,学生将了解课程信息管理系统C语言的基本语法和编程技巧,掌握C语言程序设计的基本方法,培养编程思维和解决问题的能力。
同时,学生将学会与他人合作,培养团队合作精神和良好的编程习惯。
二、教学内容根据课程目标,本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数、数组、指针等。
教学大纲将按照教材的章节进行安排,每个章节都会有相应的教学内容和教学任务。
具体的教学内容安排如下:1.第一章:C语言概述和基本语法2.第二章:数据类型和运算符3.第三章:控制结构4.第四章:函数和数组5.第五章:指针和字符串6.第六章:文件操作和程序设计三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法。
包括讲授法、讨论法、案例分析法和实验法等。
1.讲授法:通过教师的讲解,向学生传授C语言的基本概念和原理。
2.讨论法:学生进行小组讨论,促进学生之间的交流和合作。
3.案例分析法:通过分析实际案例,让学生了解C语言在实际应用中的作用和编程技巧。
4.实验法:安排实验室实践环节,让学生动手编写程序,培养编程能力和实验技能。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备适当的教学资源。
包括教材、参考书、多媒体资料和实验设备等。
1.教材:选择适合本课程的教材,作为学生学习的主要参考资料。
2.参考书:提供相关的参考书籍,供学生深入学习和拓展知识。
3.多媒体资料:制作多媒体课件和教学视频,帮助学生更好地理解和掌握知识点。
4.实验设备:提供计算机实验室,让学生进行实验和实践,提高编程能力和实验技能。
一、题目软件园企业信息管理系统某软件园按功能进行划分,形成多个园区,包括产品研发、客户中心、餐饮服务等。
各个园区都有若干企业入驻。
软件园每个月定期根据实际情况向各园区入驻企业收取物业管理费。
软件园响应“低碳”号召,为每个企业规定节能指标(规定每月用电度数),超出指标20%时,在物业管理费基础上增收5%作为惩罚;低于指标20%时,在物业管理费基础上减少5%作为奖励。
(1)需要处理的基础数据a)园区基本信息参考:b) 园区入驻企业基本信息参考:c) 企业缴费信息参考:(2)系统功能a) 各种基本数据的录入和保存,包括:各个商家的基本信息录入、各个商家出售的配件信息录入、各个商家配件的销售信息录入。
信息录入完毕后,能够对其它需计算完成的数据进行计算,并将所有结果保存到数据文件中。
b) 各种基本数据的修改。
要求能够导入数据文件中的数据,允许对已经录入的数据进行编辑、修改和保存。
c) 各种基本数据的插入。
要求能够导入数据文件中的数据,在相应结构中新增相关的基本信息。
d) 各种基本数据的删除。
能够查找指定的数据,找到后删除,并能保存结果到数据文件。
e) 基于各种数据的查询,如:xxx园区的基本信息。
能将查询结果友好的加以显示。
f) 基于各种基本数据的统计计算,能够将计算结果友好的加以显示。
(I)统计各个园区各企业的物业费情况,按从高到低排序后输出。
(II)统计某年度十二个月份各企业实际物业费总额。
(III)统计某一个月份的园区低碳龙虎榜,即按高低排序输出节能减排最高的5个园区的名称及其成果。
(IV)自行实现的其它方面的统计。
二、系统功能模块结构图三、 数据结构设计及用法说明该系统的数据结构是采用三个方向的十字链表。
模型如下:…head 园区1 园区2 园区n NULL… 企业1信息 企业2信息 企业n 信息 企业1缴费记录链企业2缴费记录链企业n 缴费记录链链表说明:Edit 功能是以后进先出的方式创建链表,search 功能遍历链表找到相应的节点,insert 功能和delete 功能分别在指定地方增加或删除节点,modify 功能修改相应的节点,view 功能为遍历链表进行排序和输出四、 程序结构(画流程图)五、各模块的功能Load功能:每次导入garden.dat、company.dat、fee.dat三个数据文件中的内容,全部读入到静态存储区中,若文件已经被导入,提示”files haves been loaded!”并返回。
Save功能:将静态存储区中的数据按三个级别链表的关系分别存入对应的文件,保存后释放存储并提示”saved”。
每次保存都会清除原有数据,只保留当前数据。
Quit功能:按下alt_x退出系统。
Edit功能:依次对garden、company、fee等信息进行输入,完毕后返回主界面。
Search garden 功能:输入要查找的信息,遍历链表进行查找,找到后提示并输出,找不到进行提示并返回主界面。
Search company功能:同上Search fee功能:同上Delete garden功能:输入要删除的信息,遍历链表进行查找,找到后提示删除,输入Y则删除,输入N则返回主界面并提示删除失败;找不到要删除的数据,直接提示删除失败并返回。
Delete company功能:同上Delete fee功能:同上Modify garden功能:输入要修改的信息,遍历链表进行查找,找到后显示该garden的信息,按提示进行修改,修改成功后继续进行提示,直至按下esc退出并返回主界面;找不到要修改的数据,直接提示修改失败并返回。
Modify company功能:同上Modify fee功能:同上Insert garden功能:提示输入,完成后显示插入成功并返回主界面。
Insert company功能:同上View功能:包括sorted actual fee、total actual fee和low-carbon winner list三个选项,total actual fee直接输出所有company的实际费用;sorted actual fee对公司的实际费用进行从低到高排序后输出;low-carbon winner list对所有园区的实际费用进行从高到低排序后输出,并只输出5个。
Help功能:包括about system和about keys两个选项,分别对该系统进行说明和对特殊的按键进行介绍。
六、试验结果(包括输入数据和输出结果)1、主界面所有功能位于最上端,按下enter键或左、右、上、下键进入子菜单File菜单:Search菜单: Delete菜单:Modify菜单: Insert菜单:View菜单: Help菜单:2、导入及保存(直接提示)3、输入数据先输入园区信息,每输入一个园区信息后提示是否继续,输入y或Y继续,否则转入公司信息录入界面,公司数由园区的信息决定,完成后转入缴费信息界面,每个公司有12条信息记录。
所有数据输入完成后返回主界面。
4、查找信息查找园区信息时,提示输入要查找的园区名字,找到后进行输出找不到进行提示并返回。
查找公司和缴费的信息类似。
5、删除信息进入删除功能后,首先调用查找函数寻找要删除的信息,若找不到则提示并退出;若找到,提示,输入y或Y从链表中删除相应节点(若要删除的节点位于garden链或company链则还要释放掉相应的子链),删除成功后提示并返回主界面。
需要注意的是此时要保存一下才能将相应的修改写入文件,否则只在本次操作中有效。
7、修改信息进入修改功能后,首先调用查找函数寻找要修改的信息,若找不到则提示并退出;若找到,输出所有信息并提示进行选择修改过程会一直循环直至按下esc键,此时提示修改成功并返回主界面。
完成后同样需要保存。
8、插入信息插入园区时除了输入园区信息,还要输入园区中的公司及相应的缴费链信息,完成后提示并返回主界面。
插入公司信息时,首先要找到公司所在的园区,之后类似。
由于每个公司的缴费信息固定为12个月的,所以没有设计插入缴费信息这一功能。
9、浏览和帮助只有信息的输出,完成后按任意键返回主界面。
七、体会本次课程设计最大的收获就是对C语言有了更深的体会和更熟练的运用。
刚开始做这份课设时,觉得这是一项好大的工程,实在是难以完成,但还是硬着头皮一点一点的写每个函数,日积月累,代码越来越长了,也越来越有信心。
当内部函数全部完成时,界面的问题就摆在了眼前。
在开始做课设前也看过一些有关界面的书,反复斟酌后还是选择了文本的,因为有TC的界面源代码,做起来依葫芦画瓢就容易很多了,而且对于一些需要有输入的函数改起来也方便些。
当所有的设计和思路都付诸于代码后,我长长的舒了一口气,但后来才发现这离完工还远着呢!调试的过程是很令人绝望的,有时候看了半天都看不出有什么问题,但功能就是不能正常的实现,这个时候真的是感觉很沮丧啊。
后来渐渐地习惯了,也找到了一些方法,最后程序总算是能正常运行,所有功能也都基本实现。
这份课设由于用了文本界面,所以看起来比较清爽,操作也相对人性化一些,但由于对界面的知识还是掌握的不好,所以还是显得比较粗糙。
还有代码还是不够完善,有很多意外退出或输入错误的情况都没有考虑到,界面也做得不够精细,这都是在调试的过程中发现的。
现在做完了再从头审视整个课程设计,我觉得最开始的设计最重要,要考虑周全一些,细节什么的都要想的到,不要害怕做不出来,有句话说的好:只有想不到,没有做不到。
还有就是耐心了,不要被一个错误引进了死胡同,要灵活的运用各种调试的手段。
最后还要感谢那些课设中给我提意见和建议的人,以及给我鼓励的人。
八、参考文献《C语言程序设计》曹计昌,卢萍,李开编著. 科学出版社九、附录:程序清单及源程序光盘/*my.h*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#define ESC 0x11b /*特殊按键*/#define ENTER 0x1c0d#define F2 113#define F3 114#define ALT_X 0x2d00#define GARDEN sizeof(struct garden) /*计算结构大小*/#define COMPANY sizeof(struct company)#define FEE sizeof(struct fee)struct view /*公司实际费用*/{char garden; /*所属园区*/int bianhao; /*公司编号*/float fee_actual; /*公司总实际费用*/struct view * next;};struct view *head_v=NULL;struct view1 /*园区总奖惩费用*/{char garden; /*园区名字*/float jc_total; /*奖惩费用*/struct view1 * next;};struct view1 *head_v1=NULL;struct garden /*园区信息*/{char name; /*园区名字*/char introduction[20]; /*园区简介*/float rate; /*物业费率*/int num_company; /*包含公司数*/struct garden * next_garden; /*指向下一个园区节点*/struct company * next_company; /*指向公司节点*/} * p1;struct garden * head=NULL;struct garden * hp1=NULL;struct company /*公司信息*/{char name[50]; /*公司名称*/int bianhao; /*公司编号*/char belong; /*所属园区*/float area; /*公司面积*/int num_people; /*公司人数*/int num_power_basic; /*基准用电度数*/struct company * next_company; /*指向下一个公司节点*/ struct fee * next_fee; /*指向缴费节点*/} * p2;struct fee /*费用信息*/{int bianhao; /*缴费公司编号*/int month; /*缴费月份*/int num_power_actual; /*实际用电度数*/float fee_property; /*应缴物业费*/float fee_jiangcheng; /*奖惩费用*/float fee_actual; /*实际费用*/struct fee * next; /*指向下一个缴费节点*/} * p3;char *Menu[] = {"File", /*主菜单*/"Edit","Search","Delate","Modify","Insert","View","Help"};char *Menus[] = {"load F3", /*子菜单*/ "save F2","quit Alt-X","search garden","search company","search fee","delate garden","delate company","delate fee","modify garden","modify company","modify fee","insert garden","insert company","sorted actual fee","total actual fee","low-carbon winner list","about system","about keys"};int MnN[] = { 3, 0, 3, 3, 3, 2, 3, 2};int MnLoc[][5] = {{4,3,2,18,6},{11,0,0,0,0},{18,17,2,36,6},{27,26,2,45,6},{36,35,2,54,6},{45,44,2,62,5},{54,53,2,79,6},{62,61,2,79,5}};int Mnm, Mns;void ShowMenuM (void);void SetMenuM (int );void ClrMenuM (int );void ShowMenuS (int );void HideMenuS (int );void SetMenuS (int );void ClrMenuS (int );void SelLR (int );void SelUD (int );void ExeItem (int, int);void ScanKb (int *, int *);char sav[4096]; /*申请内存区*/char buf[30*25*2],buf1[40*3*2],buf2[20*10*2]; enum S{LOAD=1,UNLOAD=0};enum S state;struct garden * load(struct garden * head);void save(struct garden * head);struct garden * input_garden(struct garden ** head); void input_company(struct garden * head);void input_fee(struct garden *head);void search_garden();void search_company();void search_fee();struct garden * search_p1(struct garden * head); struct company * search_p2(struct garden * head); struct fee * search_p3(struct garden * head);void del_garden(struct garden * head);void del_company(struct garden * head);void del_fee(struct garden * head);void modify_garden();void modify_company();void modify_fee();struct garden * insert_garden(struct garden ** head); void insert_company(struct garden *head);void chart1(int y1,int y2,char *v[]);void box(int startx,int starty,int high,int width); void form_menu(int a,int b,int c,int d,char*v[]);int get_key();void warn(char *s);int warn1(char *s);void create_v();void create_v1();void sort_v();void sort_v1();void view();void view1();void help();void help1();/*main.c*/#include"my.h"#include"delete.c"#include"function.c"#include"input.c"#include"insert.c"#include"load.c"#include"modify.c"#include"save.c"#include"search.c"#include"search_p.c"void main(void){int i,idx,key0,key1,flag = 1;textbackground(BLUE);clrscr( );ShowMenuM();Mnm = 1;Mns = 0;SetMenuM(Mnm);gettext(1, 1, 80, 25, sav);while(flag){key0=key1=0;ScanKb(&key0, &key1);if(key0 != 0){ /*if an ordinary key is pressed*/ if(Mns == 0){ /*operate on main menu*/if(key0 == 13)ShowMenuS(Mnm);else{for(i=0;i<8;i++)if(key0 - *Menu[i] == 0 || key0 - *Menu[i] == 32) break;if(i < 8)ShowMenuS(i+1);}}else{ /*operate on sub menu*/if(key0 == 13)ExeItem(Mnm,Mns);else if(key0 == 27){HideMenuS(Mnm);Mns = 0;}else{for(i=1,idx=0;i<Mnm;i++)idx += MnN[i-1];for(i=idx;i<idx+MnN[Mnm-1];i++)if(key0 - *Menus[i] == 0 || key0 - *Menus[i] == 32) break;if(i < idx + MnN[Mnm-1])ExeItem(Mnm,i - idx + 1);}}}else{ /*if a special key is pressed*/switch(key1){case 61: ExeItem(1,1); break; /*F3*/case 60: ExeItem(1,2); break; /*F2*/case 45: flag = 0; break; /*Alt+X*/case 72: SelUD(-1); break; /*UP*/case 80: SelUD( 1); break; /*DOWN*/case 75: SelLR(-1); break; /*LEFT*/case 77: SelLR( 1); break; /*Right*/}}}}void ShowMenuM(void) /*show main menu*/ {int i;window(1,1,80,1);textbackground(WHITE);textcolor(BLACK);clrscr( );for(i=0; i<8; i++){gotoxy(MnLoc[i][0], 1);textcolor(RED);cprintf("%c", *Menu[i]);textcolor(BLACK);cprintf("%s", Menu[i]+1);}}void SetMenuM(int mmn) /*tag main menu*/{window(1,1,80,1);textbackground(BLACK);textcolor(WHITE);gotoxy(MnLoc[mmn-1][0], 1);cprintf("%s", Menu[mmn-1]);}void ClrMenuM(int mmn) /*clear the tag of main menu*/{window(1,1,80,1);textbackground(WHITE);gotoxy(MnLoc[mmn-1][0], 1);textcolor(RED);cprintf("%c", *Menu[mmn-1]);textcolor(BLACK);cprintf("%s", Menu[mmn-1]+1);}void ShowMenuS(int mmn) /*show sub menu of main menu mmn*/ {int i, left, top, right, bottom, ht, wd, idx;if(mmn == Mnm && Mns > 0)return;if(mmn != Mnm){if(Mns>0 && Mnm != 2) HideMenuS(Mnm);ClrMenuM(Mnm);SetMenuM(Mnm=mmn);}Mns = 1;if(Mnm == 2)left = MnLoc[Mnm-1][1];top = MnLoc[Mnm-1][2];right = MnLoc[Mnm-1][3];bottom = MnLoc[Mnm-1][4];ht = bottom - top + 1;wd = right - left + 1;for(i=1,idx=0;i<Mnm;i++)idx += MnN[i-1];gettext(left, top, right, bottom, buf);window (left, top, right, bottom);textbackground(WHITE);textcolor(BLACK);clrscr( );window (left, top, right, bottom + 1);putch(0xda);for(i=2;i<wd;i++)putch(0xc4);putch(0xbf);for(i=2;i<ht;i++){gotoxy(1,i);textcolor(BLACK);cprintf("%c %-*s%c", 0xb3, wd - 3, Menus[idx+i-2], 0xb3);gotoxy(3,i);textcolor(RED);cprintf("%c", *Menus[idx+i-2]);}gotoxy(1,i);textcolor(BLACK);putch(0xc0);for(i=2;i<=right-left;i++)putch(0xc4);putch(0xd9);SetMenuS(Mns);}void HideMenuS(int mmn) /*hide sub menu of main menu mmn*/ {int left, top, right, bottom;left = MnLoc[mmn-1][1];top = MnLoc[mmn-1][2];right = MnLoc[mmn-1][3];bottom = MnLoc[mmn-1][4];puttext(left, top, right, bottom, buf);}void SetMenuS(int smn) /*tag sub menu*/{int i, left, top, right, bottom, ht, wd, idx;if(Mnm == 2)return;ClrMenuS(Mns);Mns = smn;left = MnLoc[Mnm-1][1];top = MnLoc[Mnm-1][2];right = MnLoc[Mnm-1][3];bottom = MnLoc[Mnm-1][4];wd = right - left + 1;for(i=1,idx=0;i<Mnm;i++)idx += MnN[i-1];idx += Mns - 1;window (left, top, right, bottom);textbackground(BLACK);textcolor(WHITE);gotoxy(2,Mns+1);cprintf(" %-*s", wd - 3, Menus[idx]);}void ClrMenuS(int smn) /*clear the tag of sub menu*/ {int i, left, top, right, bottom, ht, wd, idx;if(Mnm == 2)return;left = MnLoc[Mnm-1][1];top = MnLoc[Mnm-1][2];right = MnLoc[Mnm-1][3];bottom = MnLoc[Mnm-1][4];wd = right - left + 1;for(i=1,idx=0;i<Mnm;i++)idx += MnN[i-1];idx += smn - 1;window (left, top, right, bottom);textbackground(WHITE);textcolor(BLACK);gotoxy(2,smn+1);cprintf(" %-*s", wd - 3, Menus[idx]);gotoxy(3,smn+1);textcolor(RED);cprintf("%c", *Menus[idx]);}void SelLR(int lr) /*select menu item left or right*/{int mmn = Mnm + lr;if(mmn > 8)mmn = 1;else if(mmn < 1)mmn = 8;if(Mns > 0)ShowMenuS(mmn);else{ClrMenuM(Mnm);SetMenuM(Mnm=mmn);}}void SelUD(int ud) /*select submenu item up or down*/{int smn = Mns + ud;if(Mnm == 2)return;if(smn > MnN[Mnm-1])smn = 1;else if(smn < 1)smn = MnN[Mnm-1];if(Mns == 0){if(ud == 1) ShowMenuS(Mnm);}else{if(Mnm == 8 && smn == 5)if(ud > 0) smn++; else smn--;ClrMenuS(Mns);SetMenuS(Mns=smn);}}void ExeItem(int mmn, int smn) /*execute the corresponding command*/ {int i, key0, key1, a;if(mmn == 1 && smn == 9) exit(0);if(Mns > 0 && Mnm != 2) HideMenuS(Mnm); if(mmn != Mnm){ClrMenuM(Mnm);SetMenuM(Mnm=mmn);}Mns = 0;a = mmn*10 + smn;if(mmn == 2) /*进入edit功能*/{head=input_garden(&head);input_company(head);input_fee(head);return;}elseswitch(a) /*进入其他功能*/{case 11:head=load(head);break;case 12:save(head);break;case 13:exit(0);case 31:search_garden();break;case 32:search_company();break;case 33:search_fee();break;case 41:del_garden(head);break;case 42:del_company(head);break;case 43:del_fee(head);break;case 51:modify_garden();break;case 52:modify_company();break;case 53:modify_fee();break;case 61:head=insert_garden(&head);break; case 62:insert_company(head);break;case 71:create_v();sort_v();view();break;case 72:create_v();view();break;case 73:create_v1();sort_v1();view1();break;case 81:help();break;case 82:help1();break;default:break;}}void ScanKb(int *pk0, int *pk1) /*accept input from keyboard*/ {int key;while (bioskey(1) == 0);key = bioskey(0);*pk0 = key & 0xff;*pk1 = (key >> 8) & 0xff; /*return key*/}/*load.c*/struct garden * load(struct garden * head) /*导入文件中的数据*/ {FILE * fp1, *fp2, *fp3;struct garden **pp;head=NULL;if(state == LOAD){warn("Files have been loaded ==!");puttext(1, 1, 80, 25, sav);return;}else{if((fp1=fopen("garden.dat","rb")) == NULL){warn("Can't find garden.dat");return;}if((fp2=fopen("company.dat","rb")) == NULL){warn("Can't find company.dat");return;}if((fp3=fopen("fee.dat","rb")) == NULL){warn("Can't find fee.dat");return;}while(! feof(fp1)){p1=(struct garden *)malloc(GARDEN);fread(p1, GARDEN, 1, fp1);if(! feof(fp1)){p1->next_company=NULL;p1->next_garden=head;head=p1;}}while(! feof(fp2)){p1=head;p2=(struct company *)malloc(COMPANY);fread(p2, COMPANY, 1, fp2);if(! feof(fp2)){while(p1 !=NULL){if(p1->name == p2->belong){p2->next_fee=NULL;p2->next_company=p1->next_company; p1->next_company=p2;break;}elsep1=p1->next_garden;}}}while(! feof(fp3)){p3=(struct fee *)malloc(FEE);fread(p3, FEE, 1, fp3);if(! feof(fp3)){p1=head;while(p1 != NULL){p2=p1->next_company;while(p2 != NULL){if(p2->bianhao == p3->bianhao){p3->next=p2->next_fee;p2->next_fee=p3;goto out;}p2=p2->next_company;}p1=p1->next_garden;}}out:;}state=LOAD;fclose(fp1);fclose(fp2);fclose(fp2);warn("loaded ^_^");*pp=head;return *pp;}}/*save.c*/void save(struct garden * head) /*将链表内容写入文件*/ {FILE * fp1, * fp2, * fp3;if((fp1=fopen("garden.dat", "wb")) == NULL){warn("Can't find garden.dat!");return;}if((fp2=fopen("company.dat", "wb")) == NULL){warn("Can't find company.dat!");return;}if((fp3=fopen("fee.dat", "wb")) == NULL){warn("Can't find fee.dat!");return;}p1=head;while(p1 != NULL){fwrite(p1, GARDEN, 1, fp1);p2=p1->next_company;while(p2 != NULL){fwrite(p2, COMPANY, 1, fp2);p3=p2->next_fee;while(p3 != NULL){fwrite(p3, FEE, 1, fp3);p3=p3->next;}p2=p2->next_company;}p1=p1->next_garden;}fclose(fp1);fclose(fp2);fclose(fp3);warn("saved ^#^");}/*input.c*/struct garden * input_garden(struct garden ** head) /*录入园区信息*/ {int a;char *s[]={"garden name", "introduction","property fee rate", "company amount"},* t[]={"information of gardens"};char * test[4096];*head=NULL;form_menu(30, 5, 55, 7, t);form_menu(12, 13, 71, 18, s);window(50, 14, 70, 17);textbackground(WHITE);textcolor(BLACK);gettext(50, 14, 70, 17,test);clrscr();do{window(50, 14, 70, 17);fflush(stdin);p1=(struct garden *)malloc(GARDEN);gotoxy(1, 1);scanf("%c", &p1->name);gotoxy(1, 2);scanf("%s", p1->introduction);gotoxy(1, 3);scanf("%f", &p1->rate);gotoxy(1, 4);scanf("%d", &p1->num_company);p1->next_garden=*head;p1->next_company=NULL;*head =p1;fflush(stdin);puttext(50, 14, 70, 17,test);a=warn1("go on?(Y/N)");}while(a == 'Y' || a == 'y');return *head;}void input_company(struct garden * head) /*录入公司信息*/ {int i;char *s[]={"garden", "company name", "company number", "area", "num of people", "basic power"},* t[]={"information of companies"};form_menu(30, 5, 55, 7, t);form_menu(12, 13, 71, 20, s);window(40, 14, 70, 19);textbackground(WHITE);textcolor(BLACK);clrscr();p1=head;if(p1 == NULL){warn("input the date!");return;}while(p1 != NULL){for(i=0; i<(p1->num_company); i++){gotoxy(1, 1);cprintf("garden %c", p1->name);p2=(struct company *)malloc(COMPANY); p2->next_fee=NULL;p2->belong=p1->name;gotoxy(1, 2);scanf("%s", p2->name);gotoxy(1, 3);scanf("%d", &p2->bianhao);gotoxy(1, 4);scanf("%f", &p2->area);gotoxy(1, 5);scanf("%d", &p2->num_people);gotoxy(1, 6);scanf("%d", &p2->num_power_basic);p2->next_company=p1->next_company;p1->next_company=p2;fflush(stdin);clrscr();}p1=p1->next_garden;}return;}void input_fee(struct garden *head) /*录入公司缴费信息*/{int i, a;int key0=0,key1=0;char * s[]={"company number", "month", "actual power","property fee", "fee of R&P", "actual fee"},* t[]={"information of fees"};form_menu(30, 5, 55, 7, t);form_menu(12, 13, 71, 20, s);window(40, 14, 70, 19);textbackground(WHITE);textcolor(BLACK);clrscr();p1=head;if(p1 == NULL){warn("input the data!");return;}while(p1 != NULL){p2=p1->next_company;while(p2 != NULL){for(i=0; i<12; i++){gotoxy(1, 1);cprintf("%d", p2->bianhao);gotoxy(1, 2);cprintf("%d", i+1);p3=(struct fee *)malloc(FEE);p3->bianhao=p2->bianhao;p3->month=i+1;gotoxy(1, 3);scanf("%d", &p3->num_power_actual);gotoxy(1, 4);scanf("%f", &p3->fee_property);if(p3->num_power_actual>(p2->num_power_basic*1.2)) {p3->fee_jiangcheng=p3->fee_property*0.05;p3->fee_actual=p3->fee_property*1.05;gotoxy(1, 5);cprintf("+ %.2f", p3->fee_jiangcheng);gotoxy(1, 6);cprintf("%.2f", p3->fee_actual);}elseif(p3->num_power_actual<(p2->num_power_basic*0.8)) {p3->fee_jiangcheng=0-p3->fee_property*0.05;p3->fee_actual=p3->fee_property*0.95;gotoxy(1, 5);cprintf("%.2f", p3->fee_jiangcheng);gotoxy(1, 6);cprintf("%.2f", p3->fee_actual);}else{p3->fee_jiangcheng=0;p3->fee_actual=p3->fee_property;gotoxy(1, 5);cprintf("%.2f", p3->fee_jiangcheng);gotoxy(1, 6);cprintf("%.2f", p3->fee_actual);}p3->next=p2->next_fee;p2->next_fee=p3;getchar(); getchar();clrscr();}p2=p2->next_company;fflush(stdin);clrscr();}p1=p1->next_garden;}puttext(1, 1, 80, 25, sav);fflush(stdin);return;}/*search.c*/void search_garden() /*查找园区信息*/{char * s[]={"garden name", "introduction","property fee rate", "company amount"};int key=0;p1=search_p1(head); /*查找相应节点*/if(p1 ==NULL)return;else{chart1(10, 18, s); /*输出节点信息*/window(36, 11, 55, 17);gotoxy(1, 1);printf("%c", p1->name);gotoxy(1, 3);printf("%s", p1->introduction);gotoxy(1, 5);printf("%.2f", p1->rate);gotoxy(1, 7);printf("%d", p1->num_company);getchar();puttext(1,1,80,25,sav);}}void search_company() /*查找公司信息*/{char * s[]={"garden", "company name", "company number", "area", "num of people", "basic power"};int key=0;p2=search_p2(head);if(p2 == NULL) return;else{chart1(8, 20, s);window(36, 9, 55, 19);gotoxy(1, 1);printf("%c", p2->belong);gotoxy(1, 3);printf("%s", p2->name);gotoxy(1, 5);printf("%d", p2->bianhao);gotoxy(1, 7);printf("%.2f", p2->area);gotoxy(1, 9);printf("%d", p2->num_people);gotoxy(1, 11);printf("%d", p2->num_power_basic);getchar();puttext(1,1,80,25,sav);}}void search_fee() /*查找缴费信息*/{char * s[]={"company number", "month", "actual power","property fee", "fee of R&P", "actual fee"};int key=0;p3=search_p3(head);if(p3 ==NULL)return;else{chart1(8, 20, s);window(36, 9, 55, 19);gotoxy(1, 1);printf("%d", p3->bianhao);gotoxy(1, 3);printf("%d", p3->month);gotoxy(1, 5);printf("%d", p3->num_power_actual);gotoxy(1, 7);printf("%.2f", p3->fee_property);gotoxy(1, 9);printf("%.2f", p3->fee_jiangcheng);gotoxy(1, 11);printf("%.2f", p3->fee_actual);getchar();puttext(1,1,80,25,sav);}}/*search_p.c*/struct garden * search_p1(struct garden * head) /*遍历链表查找园区节点*/ {char c,* s[]={"garden name:"};struct garden ** hp1;int key=0;p1=head;if(p1 == NULL){warn("unload ==!");return NULL;}gettext(12, 13, 50, 15, buf1);warn("input garden name~~");form_menu(12, 13, 50, 15, s);window(30, 14, 48, 14);textbackground(WHITE);textcolor(BLACK);clrscr();gotoxy(1, 1);scanf("%c", &c);clrscr();puttext(12, 13, 50, 15, buf1);while(p1 != NULL && p1->name != c)p1=p1->next_garden;if(p1->name == c){*hp1=p1;getchar();warn("find ^_^");puttext(12, 13, 50, 15, buf1);return *hp1;}else{getchar();warn("can't find ==!");puttext(12, 13, 50, 15, buf1);return NULL;}}struct company * search_p2(struct garden * head) /*查找公司节点*/ {char c, ch[50], * s[]={"garden name", "company name"};struct company **hp2;p1=head;p2=p1->next_company;if(p1 ==NULL && p2 == NULL){warn("unload ==!");return NULL;}gettext(12, 13, 71, 16, buf1);warn("input name of garden and company~~"); form_menu(12, 13, 71, 16, s);window(50, 14, 70, 15);textbackground(WHITE);textcolor(BLACK);clrscr();gotoxy(1, 1);scanf("%c", &c);gotoxy(1, 2);scanf("%s", ch);clrscr();puttext(12, 13, 71, 16, buf1);while(p1 != NULL && p1->name != c)p1=p1->next_garden;if(p1->name == c){p2=p1->next_company;while(p2 != NULL && strcmp(p2->name, ch)) p2=p2->next_company;if(!strcmp(p2->name, ch)){*hp2=p2;getchar();warn("find^_^");puttext(12, 13, 71, 16, buf1);return *hp2;}goto loop;}else{loop:getchar();warn("cant't find ==!");puttext(12, 13, 71, 16, buf1);return NULL;}}struct fee * search_p3(struct garden * head) /*查找缴费节点*/ {char c, ch[50], * s[]={"garden name", "company name", "month"}; int n;struct fee ** hp3;p1=head;if(p1 == NULL){warn("unload ==!");return NULL;}gettext(12, 13, 71, 17, buf1);warn("input name of garden and company, month of fee~~");form_menu(12, 13, 71, 17, s);window(50, 14, 70, 16);textbackground(WHITE);textcolor(BLACK);clrscr();gotoxy(1, 1);scanf("%c", &c);gotoxy(1, 2);scanf("%s", ch);gotoxy(1, 3);scanf("%d", &n);clrscr();puttext(12, 13, 71, 17, buf1);while(p1 != NULL && p1->name != c)p1=p1->next_garden;if(p1->name == c){p2=p1->next_company;while(p2 != NULL && strcmp(p2->name, ch))p2=p2->next_company;if(!strcmp(p2->name, ch)){p3=p2->next_fee;while(p3 != NULL && p3->month != n)p3=p3->next;if(p3->month == n){*hp3=p3;getchar();warn("find^_^");puttext(12, 13, 71, 17, buf1);return *hp3;}goto loop;}goto loop;}else{loop:getchar();warn("can't find ==!");puttext(12, 13, 71, 17, buf1);return NULL;}}/*delete.c*/void del_garden(struct garden * head) /*删除园区信息*/ {struct garden * prior1;int key0=0;prior1=head;p1=search_p1(head);if(p1==NULL){warn("can't find! delete failed ==!");return;}if(p1!=head)while(prior1->next_garden != p1){prior1=prior1->next_garden;}key0=warn1("delete it?(Y/N)"); /*提示删除*/if(key0 == 'y' || key0 == 'Y'){p2=p1->next_company;while(p2 != NULL){p3=p2->next_fee;while(p3 != NULL){p2->next_fee=p3->next;free(p3);p3=p2->next_fee;}p1->next_company=p2->next_company;free(p2);p2=p1->next_company;}if(p1==head){head = p1->next_garden;}elseprior1->next_garden=p1->next_garden;free(p1);warn("delete successfully!");}else{warn("delete failed ==!");return;}}void del_company(struct garden * head) /*删除公司信息*/ {struct company * prior2;int key0=0;char c, ch[50], * s[]={"garden name", "company name"};if(head ==NULL){warn("unload!");return;}p1= head;gettext(12, 13, 71, 16, buf1);warn("input name of garden and company:");form_menu(12, 13, 71, 16, s);window(50, 14, 70, 15);textbackground(WHITE);textcolor(BLACK);clrscr();。