科技成果信息管理系统_大学c语言课程设计实验报告(编辑修改稿)内容摘要:

跳转至并展开 第一个张江 点击查询,跳转至并展开第二个张江 C 语言课程设计实验报告 26 15. 统计 各单位科技成果总数及各类成果数 16. 统计各单位成果排名 C 语言课程设计实验报告 27 17. 统计 50 岁以下第一完成人 18. 软件信息及作者信息 C 语言课程设计实验报告 28 19. 退出前提示保存 六、 实验体会 首先我看了一下实验书上的编程规范和几个基本模块的实现思想,但当我开始做的时候我发现光用 自己看不懂文本菜单操作肯定 会有很多问题的,于是我想同样是学,不如直接学图形界面的开发。 因为之前有些 linux 下的经验,所以选择了 GTK+在 linux 下 开发。 之前完全没有接触过 GTK+和图形界面开发的东西,于是便开始了两个多星期的 GTK+学习。 GTK+的资料并不如 windows SDK 等一些主流技术那么多,中文资料的情况基本就是 少,乱,老。 没有合适的书,只找到一份网页中文教程,但做得还挺不错,边看教程边实验边查官网的 Reference Manual ,算是学了个大概。 我觉得经过这次我对在网上学技术有了更多的认识,的确是最佳的方式。 C 语言课程设计实验报告 29 在一开始我通过头文件和多个 .C 文件来划分 了 一下整个程序的模块,虽然不是一开始规划 完 整体的结构,但边写边规划还是很不错的 ,这个 可以根据各处开头的注释看出那种模块化的感觉。 我在开发的过程中,一直都重点地考虑了 重用性 ,抽取定义了一些多处重复使用的函数, 里面的函数基本都是这样的。 我也定义了许多函数指针数组、枚举常量等等来将 3 种节点的情况在一个函数里完成,包括 输入框等的生成也是同一个 for 循环不同的条件。 我写完主界面后因为比较顺利,一次写完了 3 块东西才一起调试,结果大量的问题一下涌现,调试毫无头绪。 那段时间真是绝望到怀疑自己 能不能写出能运行 的成品。 后来只能又重新学习更多调试方法与技巧,然后再 循序渐进 地先看 warning,再看代码,再用 GDB, 一个问题一个问题 解决,经过同学的给力帮助还有自己在网上学习查找相关内容终于在解决了几个关键问题后跨过了这一步。 那将近一个星期完全没有新代码,花了好几倍的时间调试之前的那几个模块,不过感觉很多基本调试方法之前都没掌握,还是很值得很有收获的,之后的调试便顺利多了。 C 语言的问题很多都是极小的问题但经过 最后进入写报告阶段,之前就做了一些准备, 也有很多 word 排版的经验,所以效果自认为还不错吧,主要是电子版。 就是流程图上因为和图形界面交互的操作比较繁琐,不知道处理得是否得当。 回顾整个课设的历程,第一次做这种实用的大型程序,又是边学边用 GTK+,确实是边写边积累了很多宝贵的经验。 收获在前面已经说了很多了,另一方面真的是深感自己知识与能力的不足, 不要好高C 语言课程设计实验报告 30 骛远,想着要学什么什么多少,学了后踏踏实实地写出点东西才是真的学到了,还好感觉这次已经弥补了足够多的欠缺。 系统本身也还有许多有待完善的地方,也如果有需要的话接下来可以做下。 我用的各种查找的方法都有点太依赖于名称,和遍历的方法比起来有很多缺点,但在大量数据的情况也有优势,可以结合一下。 跟真正使用的系统比起里又更是差距甚远,这次感觉到 软件的体验方面对程序员来说也真的是个大问题,这个以后可以在工作中和 PM 好好合作做好把。 就是这样了, C 语言的入门算是以课设结束了吧,接下来还有很多用 C 的地方,下次再见吧。 七、 附录 1: 参考文献 [1] gtk2tutorial2 [2] gtk2 Reference Manual [3] 李开 ,卢萍 ,曹计昌 . C 语言实验与课程设计 ,北京:科学出版社 ,20xx. 八、 附录 2:程序清单 1) ifndef _ACHSMIS_H define _ACHSMIS_H /*头文件 */ include include include include gtk/ C 语言课程设计实验报告 31 define NAME root define PWD 123456 /******************** 结构声明 *********************/ /**完成人员信息链结点结构 */ 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。 /**科技成果信息链结点结构 */ 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。 /**单位信息链结点结构 */ typedef struct dept_node { char number[8]。 /*单位编号 */ char name[30]。 /*单位名称 */ char PIC[20]。 /*负责人 */ C 语言课程设计实验报告 32 struct dept_node *next。 /*指向下一结点 */ struct archs_node *achs。 /*指向科技成果信息链结点的指针 */ GtkTreeIter iter。 /*treeview 中对应 treeiter*/ } DEPT_NODE。 /**将登陆窗体独立成一个结构体 */ 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。 typedef union nodep /*指向节点的指针联合 */ { struct dept_node *dept。 struct achs_node *achs。 struct member_node *member。 } nodep。 struct nodecreate /*传递参数 */ { GtkWidget *window。 GtkWidget *entry[9]。 nodep unp。 int type。 }。 struct query_judge /*传递参数 */ { GtkWidget *entry。 int flag。 }。 C 语言课程设计实验报告 33 /******************** 全局变量 *********************/ GtkWidget *window。 /*主界面窗口 */ GtkWidget *showlist。 /*显示属性的位置 */ GtkListStore *liststore。 GtkListStore *lstore[3]。 /*显示栏左边项目名 liststore 组 */ GtkTreeStore *treestore。 /*树形储存 */ GtkWidget *treeview。 /*树状列表目录 */ GtkTreeIter rootiter。 /*根位置 */ GtkTreeIter selectediter。 /*选中的位置 */ /*显示属性 liststore 的控件组 */ GtkTreeIter dept_iter[3]。 GtkTreeIter achs_iter[9]。 GtkTreeIter member_iter[8]。 DEPT_NODE *gp_head。 /*主链头指针 */ char **Str_Pointer[3]。 void (*query_node[3])()。 /* 中已初始化的全局变量 */ extern char *gp_dept_info_filename。 extern char *gp_achs_info_filename。 extern char *gp_member_info_filename。 extern char *Node_Str[]。 extern int NODE_INS[]。 extern char *Dept_Str[]。 extern char *Achs_Str[]。 extern char *Member_Str[]。 enum //iter 里的列号 { COLUMN = 0, COMMENT }。 enum { TYPE_ROOT =1, TYPE_DEPT, TYPE_ACHS, TYPE_MEMBER }。 C 语言课程设计实验报告 34 /******************** 函数声明 *********************/ /***/ void init_menubar(GtkWidget *menubar)。 void create_view_and_model (void)。 void init_show(GtkWidget *list)。 void on_changed(GtkWidget *widget, gpointer statusbar)。 /***/ int LoadData(GtkWidget *button)。 int LoadList(DEPT_NODE **phead)。 void rebuildtree()。 int SaveData(GtkW。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。