当前位置:文档之家› 科技成果信息管理系统

科技成果信息管理系统

学院《C语言程序设计》课程设计基础部分实验报告题目:科技成果信息管理系统专业:计算机科学与技术班级:学号:姓名:成绩:指导教师:目录一、系统功能结构设计 (1)二、数据结构设计 (1)三、程序结构 (4)四、函数原型及功能 (9)五、试验结果 (13)六、实验体会 (29)七、附录1:参考文献 (31)八、附录2:程序清单 (31)一、系统功能结构设计航科技成果信息管理系统由五大功能模块组成:文件模块,编辑模块,查询模块,统计模块,帮助模块。

如下图所示:二、数据结构设计1.单位信息链结点结构(DEPT_NODE)及用法typedef struct dept_node{char number[8]; /*单位编号*/char name[30]; /*单位名称*/char PIC[20]; /*负责人*/struct dept_node *next; /*指向下一结点*/struct archs_node *achs; /*指向科技成果信息链结点的指针*/GtkTreeIter iter;/*treeview中对应treeiter*/} DEPT_NODE;2.科技成果信息链结点结构(ACHS_NODE)及用法typedef struct achs_node{char number[12]; /*成果编号*/char name[50]; /*成果名称*/char field[20]; /*所属技术领域*/char first_dept_name[30]; /*第一完成单位*/char first_dept_number[8]; /*第一完成单位编号*/char first_member_name[20]; /*第一完成人*/char award_name[30]; /*获奖名称*/char award_level[10]; /*获奖档次*/char award_grade[10]; /*获奖等级*/struct arhs_node *next; /*指向下一节点*/struct member_node *members; /*指向完成人员信息结点的指*/GtkTreeIter iter; /*treeview中对应treeiter*/ } ACHS_NODE;获奖等级 int award_grade 1 /*一等奖*/3.完成人员信息链结点结构(MEMBER_NODE)及用法typedef struct member_node {char number[18]; /*身份证号*/ char name[20]; /*姓名*/char dept_name[30]; /*工作单位*/ char sex[4]; /*性别*/ int age; /*年龄*/ char title[15]; /*职称*/ int rank; /*成果排名*/char achs_name[40]; /*所属成果名称*/struct member_node *next;/*指向下一个结点*/ GtkTreeIter iter; /*treeview 中对应treeiter*/ } MEMBER_NODE;中文字段名 类型及长度举例姓名 char[20] number Lu_zhengding 身份证号 char[18] name420111************工作单位 char[30] dept_name Huazhong_university_of_sci&tech 性别 char sex m 年龄 int age 60 职称 char[15] title professor 成果排名intrank1所属成果名称 char[40]achs_nameThe_method_of_study4. 三方向的十字交叉链表结构科技成果1 科技成果2科技成果n单位1单位2单位n主链头gp_head 经停航班1…经停航班n……5.登陆窗体控件结构体(wgt)及用法struct login_widget{GtkWidget *window; //主窗体GtkWidget *label_tips; //用于信息提示的标签GtkWidget *button_login; //两个按钮,一个点击后登录,一个点击后退出GtkWidget *button_exit;GtkWidget *entry_username; //两个文本框,用于输入用户名和密码GtkWidget *entry_pwd;GtkWidget *label_username; //两个标签用于显示username文本框和password文本框提示GtkWidget *label_pwd;GtkWidget *vbox; //垂直布局盒子,包含以下三个水平布局盒子GtkWidget *hbox_username; //包含用户名提示标签和用户名文本框,下面的HBOX作用类似GtkWidget *hbox_pwd;GtkWidget *hbox_button;} wgt;说明:将登陆窗体相关控件独立成一个结构体6.指向3种节点的指针联合及用法typedef union nodep{struct dept_node *dept;struct achs_node *achs;struct member_node *member;} nodep;说明:用于3种结构都会用到但不会同时用到的情形7.两个传递参数的结构及其用法struct nodecreate{GtkWidget *window;GtkWidget *entry[9];nodep unp;int type;};struct query_judge{GtkWidget *entry;int flag;};说明:GTK信号连接g_signal_connected将函数与信号链接后之内传递一个参数给函数,所以定义这两个结构分别将几个参数结合在一起传递三、程序结构1.主程序运行流程2. 数据保存流程YN YNYN开始 打开航班,经停机场,经停航班信息文P1==NULL 在文件1写入一条单位信息 P2==NULL P1=P1->next 在文件2写入一条科技成果信息 P2=p2->nextP3==NULL 关闭文件 退出系统在文件3写入一条完成人员信息P3=p3->next 结束3.添加流程4.单位查询流程5.统计50岁以下第一完成人流程四、函数原型及功能(所有GtkWidget *button参数均为与消息链接用)1.登陆模块//功能:登录框初始化函数//输入参数://返回值:无void init_login_widget()//功能:登录验证函数,点击login按钮时调用//输入参数://返回值:无void login(GtkWidget *widget,gpointer data)2.图形界面模块/**初始化部分变量,再依次调用各函数初始化界面各部分*/int main( int argc, char *argv[])/**初始化菜单栏*/void init_menubar(GtkWidget *menubar)/**初始化目录*/void create_view_and_model (void)/**初始化显示栏*/void init_show(GtkWidget *list)/**改变状态栏及显示栏*/void on_changed(GtkWidget *widget, gpointer statusbar)//功能:将选中的节点信息在显示栏中显示出来//输入参数:iter//返回值:无int Show_Node(GtkTreeIter iter)//值传递不影响selectediter/**对应3个节点显示的3个函数,返回对应GtkListStore*/GtkListStore *Show_Dept(char *name);GtkListStore *Show_Achs(char *name,char *P_name);GtkListStore *Show_Member(char *name,char *P_name,char *PP_name);3.文件模块//功能:读取数据文件//输入参数://返回值:re 的二进制前3位记录了三个数据文件是否成功打开,1为成功int LoadData(GtkWidget *button)//功能:读取数据文件中数据到链表中//输入参数:phead 单位节点头指针的地址//返回值:re 的二进制前3位记录了三个数据文件是否成功打开,1为成功int LoadList(DEPT_NODE **phead)//功能:将链表中节点添加到左侧树状列表中//输入参数://返回值:void rebuildtree()//功能:存储数据文件//输入参数://返回值:flag 的二进制前3位记录了三个数据文件是否成功打开,1为成功int SaveData(GtkWidget *button)//功能:将链表中数据存储在数据文件中//输入参数:phead单位节点头指针//返回值:flag 的二进制前3位记录了三个数据文件是否成功打开,1为成功int SaveList(DEPT_NODE *phead)//功能:推出前提示保存//输入参数://返回值:void quit_save(GtkWidget *button)4.查询模块//功能:根据type弹出一个查询框,再分别调用对应的Query函数//输入参数:type对应枚举的几种类型//返回值:无void Query_info(GtkWidget *button,int type)//功能:查询学院//输入参数:in 包含iter和名称的结构//返回值:无void Query_Dept(GtkWidget *button,struct query_judge *in)//功能:根据type弹出一个查询框,再分别调用对应的Query函数//输入参数:type对应枚举的几种类型//返回值:无void Query_info(GtkWidget *button,int type)//功能:查询完成人员//输入参数:in 包含iter和名称的结构//返回值:无void Query_Member(GtkWidget *button,struct query_judge *in)//功能:展开并跳转至指定iter//输入参数:iter treeview中的一个目标iter//返回值:无void expand_select(GtkTreeIter iter)//功能:按名称搜索单位//输入参数:D_name 单位名称//返回值:单位节点指针DEPT_NODE *DEPT_search(char *D_name)//功能:按名称搜索科技成果节点//输入参数:A_name 科技成果节点名称,ACHS 所在学院头科技成果节点指针//返回值:科技成果节点节点指针ACHS_NODE *ACHS_search(char *A_name,ACHS_NODE *ACHS)//功能:按名称搜索完成人员节点//输入参数:M_name 完成人员节点名称,ACHS 所属科技成果头完成人员节点指针//返回值:完成人员节点节点指针MEMBER_NODE*MEMBER_search(char*M_name,MEMBER_NODE *MEMBER)5.添加模块//功能:弹出一个输入框//输入参数:type对应枚举的几种类型//返回值:无void entry_info(GtkWidget *button,int type)//功能:添加3种节点统一函数,由entry_info确定按钮调用//输入参数://返回值:无void Add_node(GtkWidget *button,struct nodecreate *nodec)//功能:插入科技成果节点函数,由Add_Node中情况3调用//输入参数:pNew 指向新节点的指针//返回值:对应单位节点指针DEPT_NODE *insert_ACHS(ACHS_NODE *pNew)//功能:插入完成人员节点函数,由Add_Node中情况4调用//输入参数:pNew 指向新节点的指针//返回值:对应科技成果节点指针ACHS_NODE *insert_MEMBER(MEMBER_NODE *pNew)6.删除模块//功能:删除3种节点统一函数,由“删除”按钮调用//输入参数://返回值:无void Del_Node(GtkWidget *button)//功能:删除单位节点,由Del_Node函数case 2调用//输入参数:name 单位名称//返回值:int 1为有错,0为正常int Del_Dept(char *name)//功能:删除科技成果节点,由Del_Node函数case 2调用//输入参数:name 科技成果名称,P_name 对应单位名称//返回值:int 1为有错,0为正常int Del_Achs(char *name,char *P_name)//功能:删除完成人员节点,由Del_Node函数case 4调用//输入参数:name 完成人员名称,P_name 对应科技成果名称,PP_name 对应单位名称//返回值:int 1为有错,0为正常int Del_Member(char *name,char *P_name,char *PP_name)7.编辑模块//功能:弹出一个编辑框//输入参数://返回值:无int Edit_info(GtkWidget *button)//功能:编辑节点//输入参数://返回值:无void Edit_Node(GtkWidget *button,struct nodecreate *nodec)8.统计模块//功能:弹出一个统计框,由传入参数设置具体内容//输入参数:title 统计框标题,col1 第一列标题,col2 第二列标题,in 传入的model//返回值:无void Statis_info(char *title,char *col1,char *col2,GtkListStore *in)//功能:统计各单位科技成果数量,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func1(GtkWidget *button)//功能:统计各单位完成人员成果排名,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func2(GtkWidget *button)//功能:统计所有50岁以下第一完成人,调用Statis_info显示统计结果//输入参数://返回值:无void statis_func3(GtkWidget *button)9.帮助模块//功能:弹出软件信息及作者信息//输入参数://返回值:无void help_about(GtkWidget *button)五、试验结果编译环境:Ubuntu linux64位Mingw Gcc(源代码配置好后可跨平台编译)GTK版本:GTK+ 2.41开发IDE:Codeblocks 12.111.系统登陆输对自动进入输错显示错误2.登陆成功进入主界面3.全屏模式4.读取数据(标准gnome菜单栏在最上面)5.读取成功点击相应节点右侧显示相关信息6.添加单位(添加成功提示)7.添加科技成果8.添加完成人员9.添加错误返回信息10.编辑结点(选中节点后点击左下角编辑按钮)更改生效11.删除节点弹出确认框删除成功12.查询单位查询成功,左侧已跳转至并展开机械学院13.查询科技成果查询成功,左侧已跳转至并展开网络磁盘阵列未查询到时弹出提示14.查询完成人员从头查询,跳转至并展开第一个张江点击查询,跳转至并展开第二个张江15.统计各单位科技成果总数及各类成果数16.统计各单位成果排名17.统计50岁以下第一完成人18.软件信息及作者信息19.退出前提示保存六、实验体会首先我看了一下实验书上的编程规范和几个基本模块的实现思想,但当我开始做的时候我发现光用face.c自己看不懂文本菜单操作肯定会有很多问题的,于是我想同样是学,不如直接学图形界面的开发。

相关主题