第一篇:C语言职工工资管理系统程序设计报告
C语言课程设计报告
题
目
小型职工工资管理系统
专业班级
2016级通信工程本科1班
组
别
通信第二组
学生姓名
院(系)
信息工程系
指导教师(职称)
完成时间
2017年5月31日
课程设计任务书
题目职工工资管理系统 班级2016级通信工程本科1班 学号 201605070106 姓名 学号 201605070111 姓名 学号 201605070118 姓名 学号 201605070119 姓名 学号 201605070136 姓名
一、主要内容:
本课程设计结合本学期所学C语言知识,准备设计开发一个简单职工工资管理系统。工资管理系统是企业不可或缺的一部分,它利用计算机对员工工资进行统一管理,实现工资管理系统的系统化、规范化和自动化,为企业提高工作效率。设计开发这个系统需要用到单链表、文件读取操作、结构体、函数、指针等C语言知识。本课程设计准备通过Windows控制台应用程序实现职工工资管理系统的简单运行。利用所学知识,本着简单、易用的设计原则,本课程设计尽量实现良好、美观的“人机界面”,便于软件的操作使用。本次设计主要学习内容包括:
(一)进一步学习并熟练掌握C语言语法和编程思想。
(二)学习C语言提供的库函数,熟悉Visual C++ 6.0的开发工具。
(三)学习C语言函数、链表、结构体、文件读取、指针等知识。
(四)学习如何查阅他人的文档进行软件的设计与开发。
二、基本要求:
(一)质量要求
1.职工工资管理系统基本功能模块的设计应包括:显示主菜单功能、职工信息 的录入、添加、删除、修改、查询、排序功能,退出系统。测试文件的读取与存储是否正常、测试评估界面是否合理,友好。
2.对职工工资管理系统设计并进行调试、修复、完善、测试。3.定期主动向指导教师汇报任务进度,认真填写相关报告文档。4.按时完成各阶段工作,不突击,不抄袭。
(二)进度要求
1.明确课程设计任务,搜集资料:2017年2月28日—3月14日。
2.完成程序的设计与实现,撰写课程设计论文初稿:2017年3月15日—5月15日。
3.与指导教师沟通,完成课程设计论文定稿:2016年5月16日—2017年5月28日。
4.进入课程设计论文审阅阶段,准备答辩:2017年5月29日—6月9日。
三、主要参考资料:
1.工资管理系统课程设计程序http://blog.csdn.net/JZQT_T/article/category/2317235
2.C语言程序设计规范及基础
https://wenku.baidu.com/view/58b***409c7b.html 3.《明解C语言 第3版》,(日)柴田望洋著,人民邮电出版社 4.《C Primer Plus 第6版 中文版》,姜佑 译,人民邮电出版社 5.《C程序设计 第四版》,谭浩强著,清华大学出版社 6.《C和C++实物精选》,徐波著,北京邮电出版社
学 生 签 名: 指导教师签名:
年 月 日
目录 概述...............................................1 1.1 设计思想.................................................................................................................................1 1.2 设计原则.................................................................................................................................1 1.3 性能需求.................................................................................................................................1 1.4 课程设计报告内容及分工情况.............................................................................................2 1.4.1 课程设计报告内容.........................................................................................................2 1.4.2 课程设计分工情况.........................................................................................................2 2 总体设计...........................................3 2.1 系统功能设计图.....................................................................................................................3 2.2 主函数 main().........................................................................................................................3 2.3 程序流程图..............................................................................................................................4 3 详细设计...........................................4 3.1 函数..........................................................................................................................................4 3.2 函数流程图..............................................................................................................................9 4 运行结果与调试....................................16 4.1 运行结果...............................................................................................................................16 4.2 程序调试...............................................................................................................................21 结束语..............................................22 附录................................................24 概述
1.1 设计思想
1.系统分成几个相对独立的模块,但这些模块都进行集中式管理。
2.分层的模块化程序设计思想,整个系统采用模块化结构设计作为应用程序,有较强的可操作性和扩展性。
3.合理的数据设计,在应用系统设计中,相对独立的模块间以数据相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全性。
1.2 设计原则
为了使本系统功能齐全完备,操作简便,最大限度的提高软件的质量,从而满足用户的实际需要,在设计开发过程中遵循了如下原则:
1.合法性原则:依据产品核算系统的工作规定以及要求,参照核算实际的工作情况,进行诸如产品进货、销售等工作。
2.实用性原则:适合产品信息管理工作的实际需求,并能够处理一些特殊情况的要求,此外,尽可能预留空间,以便扩充功能。
3.准确性原则:对输入的相关资料建立检错机制,及时报错,使用户能够及时准确的输入合法资料(如:类型匹配,长度不超限等)。
4.易操作原则:要求设计的系统功能齐全,界面友好,操作方便,必要的地方进行提示。
5.源程序可读性原则:为了便于其他设计,维护人员读懂代码或以后的代码修改,软件升级维护,即可能做好代码注释工作。
1.3 性能需求
(1)支持工资信息一次性多组导入
(2)非法操作能够提示错误并且知道安全行为方式(3)信息查询时界面显示数量
1.4 课程设计报告内容及分工情况
1.4.1课程设计报告内容
1.系统功能模块结构图和程序流程图 2.数据结构设计及用法说明
3.程序结构(画功能模块图或流程图)4.各模块的功能
5.实验结果(包括输入数据和输出结果)6.设计体会 7.参考文献
1.4.2 课程设计分工情况
本组共有5人,具体分工情况如下:
(1)学号:201605070106,姓名:司笑笑,具体负责功能模块结构图和程序流 程图的设计;负责“排序”代码的编写及整体代码的整合;负责程序设计报告中函数详细设计。
(2)学号:201605070111,姓名:代慧,负责“添加”、“录入”代码的编写;负责显示界面的优化、美化。
(3)学号:201605070118,姓名:王春亚,负责“查询”代码的编写;程序的测试与调试。
(4)学号:201605070119,姓名:董子阳,负责“修改”代码的编写;具体负责实验结果的采集;程序设计报告书的校对;负责流程图的绘制。
(5)学号:201605070136,姓名:马良智,负责“删除”代码的编写;具体负责程序设计报告书的排版与完善;相关文献的查找和参考。总体设计
2.1 系统功能设计图
系统功能设计是使整个系统能基本实现职工工资管理功能,能让公司的管理者利用计算机对员工工资进行统一管理,实现工资管理系统的系统化、规范化和自动化,提高了工作效率。管理信息系统(MIS)主要的功能就是进行信息的收集、查询、存储,同时对这些信息进行维护的。
本系统共包括七大模块,分别是录入模块,添加模块,修改模块,删除模块,查询模块,排序模块,输出模块。系统功能模块设计如图2-1所示。
图2-1 小型职工工资管理系统功能模块结构图
2.2 主函数 main()
(1)函数的功能: 用于联系各个功能函数模块,以及退出程序时的退出画面提示。
(2)函数的入口: 整个程序是从主函数开始的。
(3)函数的出口: 当从main()的switch()开关结构中进入,即choise的值大于7时通过return退出main()函数,即:退出整个程序。(4)函数调用关系:该函数不被其它函数调用。
2.3 程序流程图
详细设计
3.1 函数
(1)功能函数mainMenu()①函数的功能:显示主菜单
②函数的入口:从main()进入,main()运行时进入该函数。③函数调用关系:被主函数调用。
④函数的出口:当主菜单显示在屏幕上,结束该函数。(2)功能函数input(LinkList head)①函数的功能:进入录入职工信息系统。
②函数的入口:程序从main()的switch()开关结构中进入,即choice的值为1时,开始进入该函数,进入函数后,首先用inputMenu()显示录入菜单选项,然后选择选项进行录入职工信息。
③函数调用关系:被主函数调用。从switch()开关结构中进入,并在文中无返回值的空值void函数。
④函数的出口:录入职工信息完成后,结束该函数而并执行主函数main()中“output(head);”,输出职工信息在屏幕上并保存职工信息在磁盘上,然后执行“break;”跳出switch()开关函数,继续执行while循环结构。(3)功能函数inputMenu()①函数的功能:显示录入菜单。
②函数的入口:从input(LinkList head))进入,input(LinkList head)被调用时进入该函数。
③函数调用关系:被input(LinkList head))调用,并在文中无返回值的空值void函数。
④函数的出口:当录入菜单显示在屏幕上,结束该函数。(4)功能函数hand(LinkList head)①函数的功能:进入“手动录入职工信息”。
②函数的入口:程序从input(LinkList head)的switch()开关结构中进入,即choice的值为1时,开始进入该函数,进入函数后,首先输入录入职工人数,然后逐个录入职工信息。
③函数调用关系:被input(LinkList head)调用。从switch()开关结构中进入,并在文中无返回值的空值void函数。
④函数的出口:录入全部职工信息完成后,结束该函数并执行input(LinkList head)中“break;”跳出switch()开关函数,继续执行while循环结构。(5)功能函数read(LinkList head)
①函数的功能:进入“文件录入职工信息”。
②函数的入口:程序从input(LinkList head)的switch()开关结构中进入,即choice的值为2时,开始进入该函数,进入函数后,输入需要录入的文件路径fileName,通过fopen()函数,即“if((fq=fopen(fileName,“r”))==NULL)” 打开文件,进入数据的处理。
③函数调用关系:被input(LinkList head)调用。从switch()开关结构中进入,并在文中无返回值的空值void函数。
④函数的出口:自动录入文件中全部职工信息后,结束该函数并执行input(LinkList head)中“break;”跳出switch()开关函数,继续执行while循环结构。(6)功能函数output(LinkList head)①函数的功能:输出职工信息。
②函数的入口:程序在录入、添加、修改、删除、查询、排序后都进入该函数,进入函数后,将职工信息用printf()标准输出到屏幕上,然后通过fopen()函数,即“if((fp=fopen(“d:worker.dat”, “w”))== NULL)” 打开文件,将职工信息写到d:worker.dat文件中。
③函数调用关系:被main()等多个调用。在文中无返回值的空值void函数。④函数的出口:将职工信息用printf()标准输出到屏幕上,将职工信息存入磁盘后,结束该函数。
(7)功能函数add(LinkList head)①函数的功能:添加一个职工信息。
②函数的入口:从main()的switch()开关结构中进入,即choice的值为2的时侯,进入该函数,根据提示输入职工信息。
③函数调用关系:被主函数调用。由switch()开关结构中进入,并在文中有返回值的整型int函数,返回值为1添加成功。
④函数的出口:职工信息添加成功返回1后结束该函数,并执行主函数main()中“output(head);”,输出职工信息在屏幕上并保存职工信息在磁盘上,然后执行“break;”跳出switch()开关函数,继续执行while循环结构。(8)功能函数deleteWorker(LinkList head)①函数的功能:删除 一个职工信息。
②函数的入口:从main()的switch()开关结构中进入,即choice的值为3的时侯,进入该函数,输入要删除的职工编号,删除改编号职工信息。
③函数调用关系:被主函数调用。由switch()开关结构中进入,并在文中有返回值的整型int函数,返回值为1删除成功。
④函数的出口:职工信息删除成功返回1后结束该函数,并执行主函数main()
中“output(head);”,输出剩余的职工信息在屏幕上,然后执行“break;”跳出switch()开关函数,继续执行while循环结构。(9)功能函数update(LinkList head)①函数的功能:修改一个职工信息。
②函数的入口:从main()的switch()开关结构中进入,即choice的值为4的时侯,进入该函数,输入要修改的职工编号,根据提示输入新的职工信息。
③函数调用关系:被主函数调用。由switch()开关结构中进入,并在文中有返回值的整型int函数,返回值为1修改成功。
④函数的出口:职工信息修改成功返回1后结束该函数,并执行主函数main()中“output(head);”,输出职工信息在屏幕上并保存职工信息在磁盘上,然后执行“break;”跳出switch()开关函数,继续执行while循环结构。(10)功能函数find(LinkList head)①函数的功能:进入查询职工信息系统
②函数的入口:程序从main()的switch()开关结构中进入,即choice的值为5时,开始进入该函数,进入函数后,首先用findMenu()显示查询菜单选项,然后选择选项进行查询职工信息。
③函数调用关系:被主函数调用。从switch()开关结构中进入,并在文中无返回值的空值void函数。
④函数的出口:查询职工信息完成后,结束该函数,然后执行主函数main()中的“break;”跳出switch()开关函数,继续执行while循环结构。(11)功能函数 findMenu()①函数的功能:显示查询菜单。
②函数的入口:从find(LinkList head)进入,find(LinkList head)被调用时进入该函数。
③函数调用关系:被find(LinkList head)调用,并在文中无返回值的空值void函数。
④函数的出口:当查询菜单显示在屏幕上,结束该函数。(12)功能函数findByWay(LinkList head, int n)①函数的功能:查询职工信息”。
②函数的入口:程序从find(LinkList head)的switch()开关结构中进入,即choice的值为1,2,3,4,5,6时,开始进入该函数,进入函数后,根据不同的选项值进行相应的查询。
③函数调用关系:被find(LinkList head)调用。从switch()开关结构中进入,并在文中有返回值的的整型int函数,返回值为1查询成功。
④函数的出口:查询职工信息完成后,执行“output(head);”,输出职工信息在屏幕上并保存职工信息在磁盘上,然后结束该函数,执行find(LinkList head)中“break;”跳出switch()开关函数,继续执行while循环结构。(13)功能函数sort(LinkList head)①函数的功能:进入职工信息排序系统
②函数的入口:程序从main()的switch()开关结构中进入,即choice的值为6时,开始进入该函数,进入函数后,首先用sortMenu()显示排序菜单选项,然后选择选项进行职工信息排序。
③函数调用关系:被主函数调用。从switch()开关结构中进入,并在文中无返回值的空值void函数。
④函数的出口:职工信息排序完成后,结束该函数,然后执行主函数main()中的“break;”跳出switch()开关函数,继续执行while循环结构。(14)功能函数 sortMenu()①函数的功能:显示排序菜单。
②函数的入口:从sort(LinkList head)进入,sort(LinkList head)被调用时进入该函数。
③函数调用关系:被sort(LinkList head)调用,并在文中无返回值的空值void函数。
④函数的出口:当排序菜单显示在屏幕上,结束该函数。(15)功能函数sortByWay(LinkList head, int n)①函数的功能:职工信息排序。
②函数的入口:程序从sort(LinkList head)的switch()开关结构中进入,即choice的值为1,2,3,4,5,6时,开始进入该函数,进入函数后,根据不同的选项值进行相应的排序。
③函数调用关系:被sort(LinkList head)调用。从switch()开关结构中进入,并在文中有返回值的的整型int函数,返回值为1排序成功。
④函数的出口:职工信息排序完成后,执行“output(head);”,输出职工信息在屏幕上并保存职工信息在磁盘上,然后结束该函数,执行sort(LinkList head)中“break;”跳出switch()开关函数,继续执行while循环结构。(16)功能函数uqnum(LinkList head, int num)
①函数的功能:判断职工编号是否已存在。
②函数的入口:程序add(LinkList head)中进入,输入职工编号后,开始进入该函数,进入函数后,判断输入的职工编号是否已经存在。
③函数调用关系:被add(LinkList head)调用。在文中有返回值的的整型int函数,返回值为1职工编号已存在。
④函数的出口:判断职工编号是否已存在后返回add(LinkList head),继续输入其它职工信息或重新输入职工编号。
功能实现效果如图3-1所示。
图3-1 主菜单界面
3.2 函数流程图
(1)录入职工信息
该功能模块流程如图3-2所示。
图3-2 “录入职工信息”功能模块流程图
(2)添加职工信息
该功能模块流程如图3-3所示。
图3-3 “添加职工信息”功能模块流程图
(3)删除职工信息
该功能模块流程如图3-4所示。
图3-4“删除职工信息”功能模块流程图
(4)修改职工信息
该功能模块流程如图3-5所示。
图3-5“修改职工信息”功能模块流程图
(5)查询职工信息
该功能模块流程如图3-6所示。
图3-6“查询职工信息”功能模块流程图
(6)排序职工信息
该功能模块流程如图3-7所示。
图3-7“排序职工信息”功能模块流程图 运行结果与调试 4.1 运行结果
本系统运行初始页面如图4-1所示。
图4-1 初始页面
在函数开始时,初始化临时结构体数组,让结构体内所有信息为空.,读取目标文件,然后运行功能函数,选择需要的功能。
实现效果如图4-2所示。
图4-2 输入界面
(1)根据自己需要的功能输入相应数字
图4-3职工信息的录入
图4-4职工信息的添加
图4-5职工信息的删除
4-6职工信息的修改
图4-7职工信息的查询
图4-8职工信息的排序
图4-9退出系统
(2)录入职工的信息,通过手动录入和文件录入两个方法录入职工的信息。
图4-10职工信息录入的方式
(3)查找职工的个人信息,通过输入编号、姓名、部门、基本工资、奖金和总工资进行查找。
图4-11职工信息的查询方式
(4)职工信息的排序可以通过编号排序、姓名排序、部门排序、基本工资排序、奖金排序和总工资排序。
图4-12职工信息的排序方式
(5)每次将职工信息输出在屏幕上时,都会通过fwrite写到文件D:woker.date中。
(6)根据数字提示结束程序。
4.2 程序调试
(1)每个选择界面之后,前一屏幕的内容依旧存在,影响界面的美观;经过同学的帮助及上网搜索,发现利用“system(“cls”);”可以消去前一屏幕的内容;然而接下来又出现新的问题:有些函数会出现错误;经过多次调试和修改,才发现把“system(“cls”);”放在调用的函数之前以及适当的位置可以解决此问题。(2)修改员工信息时,输入职工编号查询出多条信息,修改错误!后来加入职工编号唯一判断的函数,让职工编号唯一不重复。
(3)排序,开始交换指针指向,一直出现指针不存在导致乱码问题,后来修改为交换指针的数据域。
(4)文件写入磁盘,用笔记本打开磁盘内的文件乱码,经查询资料了解写入磁盘的文件是二进制数据,不能通过笔记本打开,可重新把文件读入程序中,在程序中显示。
(5)忘导入
结束语
工资管理系统对于决策者和管理者来说都至关重要,所以工资管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件工资档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对工资信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高工资管理的效率,也是科学化、正规化管理的重要条件。
这一个月以来,在开发这个工资管理系统过程中,我深刻地体会到了自学能力的重要性。毕竟在学校学习到的知识是有限的,而在开发系统的过程中仅凭原有的一点点知识是远远不够的,只有翻阅大量的资料才能学到更多的知识,才能实现其预期的功能。在开发过程中,遇到困难是在所难免的,期间我跟我的指导老师和同学们进行交流,从中明白了很多。开发一个系统,恒心和毅力也是不可缺少的。同样,在开发过程当中,细心也是非常重要的,由于很多事项都要很注意才行,如果没有做到这一点,就会出错。
在这里要同学的帮助、老师的悉心指导下基本完成本次课程设计,基本达到了工资管理系统的要求。
小组各成员心得体会
Xxx:
这个系统实现了对员工信息的存储、修改、删除、查询及排序。从拿到题目到完成整个编程,从理论到实践学到了很多东西。通过这次程序设计我深入了解了链表、结构体,也学会了文件的读写,懂得了理论和实际结合是很重要的。在设计过程中遇到了很多问题,这毕竟是第一次做,同时在设计过程中发现了自己的不足之处,对以前所学的知识理解的不够深刻,掌握的不够牢固,比如单链表。总之不收获很多!
Xxx:
通过这次课程设计,我对数据结构中单链表的应用有了更深的理解,并且深刻的认识了实践的重要性,只有理论与实践相结合才能很好的学习。发现想要做好课程设计,仅靠书本上的知识是不够的,还需要查阅其他的程序和知识。在这个过程中,我充分认识了数据结构在编写程序方面的重要地位,知道它的特点是可以用存储单元来存储数据,并且可以方便的实现对数据进行插入、删除和遍历等操作。
Xxx:
这个课程设计实现了对职工信息的管理,通过录入、添加、修改、删除、查询等实现对职工信息的管理。通过这次的课程设计,我学到了很多的东西。同时也找到了自己很多的不足之处。在这次课程设计中,由于以前没有好好学这门课,所以很多知识掌握的不够好,导致在编写的时候遇到很多困难,但是通过队员的帮助,得到了解决。这次课程设计,不仅让我学到了知识,更好的掌握了函数、结构体、指针、单链表等的用法,也让我知道了团队的重要性。
Xxx:
通过这次课程设计我学到了许多在课堂没有学习好的知识,同时也巩固了我之前学习的知识,在设计的过程中我补全了自己的不足,找到自己掌握的不牢固的,还有理解的不深刻的,比如:函数,结构体等等,通过这次课程设计我提高了独立思考的能力和自己的实际动手能力,我还学会了如何用流程图来表达自己的想法,同时这次课程设计也让我们小组之间加深了了解,总的来说,这次设计让我的c语言知识更加丰富!
Xxx:
经过两学期的C语言学习,我们掌握了C语言的基础知识,我对课程设计有了一定的了解和体会。并且通过这次课程设计使我懂得了理论与实践相结合是很重要的。从理论中得出结论,才能真正为今后的学习、工作服务,从而提高自己的实际动手能力和独立思考的能力。在这次程序设计中,我充分领略了C语言功能的强大,包括函数、数组、指针、结构体、文件等。而且我学会了最基本的替换,然后扩展到循环、嵌套,条理很清楚。让我也深感集体的强大力量,很多东西并不是一两个人就可以完成的,比如这个小型工资管理系统程序的编写,俗话说“众人拾柴火焰高”,经过共同的努力,最终克服难关开发出了该系统。在本次课程设计中,还有一点不得不说,通过这次程序设计书的编写让我深刻的意识到拥有好的文笔是多么的重要,我们虽为工科生,但是在以后的工作岗位上也不得不面临着各种各样的工作,所以文笔也是非常重要的。
参考资料
[1] 工资管理系统课程设计程序http://blog.csdn.net/JZQT_T/article/category/2317235
[2] C语言程序设计规范及基础
https://wenku.baidu.com/view/58b***409c7b.html [3]《明解C语言 第3版》,(日)柴田望洋著,人民邮电出版社 [4] 《C Primer Plus 第6版 中文版》,姜佑 译,人民邮电出版社 [5] 《C程序设计 第四版》,谭浩强著,清华大学出版社 [6]《C和C++实物精选》,徐波著,北京邮电出版社
附录
源代码清单:
第二篇:职工工资管理系统可行性分析
工资管理系统可行性分析
一、系统开发的必要性
随着计算机技术的飞速发展,计算机在企业和大学管理中应用的普及,利用计算机实现人事工资的管理势在必行。利用计算机支持企业高效率完成劳动人事管理的日常事务,是适应现代企业制度要求、推动企业和大学劳动人事管理走向科学化、规范化的必要条件。工资管理是任何企业单位都需要进行的一项工作,因此,开发制作工资管理系统具有较大的社会现实意义。而工资管理是一项琐碎、复杂而又十分细致的工作,工资计算、发放、核算的工作量很大,一般不允许出错,实行电子化的工资管理,可以让人力资源管理人员从繁重琐碎的案头工作解脱出来,去完成更重要的工作。职工工资管理信息系统的实现可以减轻比较繁琐的手工工资管理更加针对性、便捷性、可视化的管理职工工资。工资管理是企业管理的重要组成部分,它与企业的人事管理、财务管理有着密切的联系。对于劳资关系相对复杂的大中型企事业单位,手工进行工资的发放工作往往需要耗费大量的人力与时间。由于工资发放在时间和操作上存在着一定的重复性、规律性,这使得工资管理的计算机化成为可能,该项目的提出正是为了在此基础上进一步实现企业员工工资管理的规范化和自动化。
二、系统规划情况
可行性分析是指在客观条件制约下,对系统开发的必要性和可行性进行分析论证。它是在项目系统实施前进行的一项重要工作,对系统能否正常运行、能否从中获得经济效益起着决定性的作用。系统的可能性是只指研究系统开发的条件是否具备,而系统的必要性是指客观上是否需要。可能性与必要性相符相成,缺一不可。
(一)系统设计的必要性
由于工资核算及汇总烦琐混乱且容易出错,与职工档案相关联,所得税核算复杂,因此迫切需要一套计算机信息管理系统来实现可靠、便捷的管理。
(二)系统背景
项目的任务提出者:***公司 系统开发者: “***”财务小组 系统用户: “****”财务人员
(三)系统目标
1、提供职工档案管理程序(即能够支持增加职工记录,修改职工档案数据的程序)
2、设计输入每个已建档的职工的各项工资款
3、计算每个职工工资总额并自动计算代扣个人所得税、4、汇总职工工资编制输出工资汇总表
三、系统开发的可行性
运用计算机的便捷性,程序的可操作性,让我们更能够方便快捷的对信息系统进行科学性的管理。与此同时,我们能够利用专业知识来解决实际问题。在各种计算机语言中,VB是一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言;VB可用于开发Windows环境下的各类应用程序;在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具。因此,我们使用VB做简单的开发程序。
(一)项目与其他软件或其他系统的关系:
工资管理系统是全企业信息管理系统的一个有机组成部分,它需要和员工人事管理、员工工时考勤、员工医疗保险等系统连接,能够从这些系统中正确的取得员工基本工资、津贴、医疗保险等信息。
(二)社会因素方面的可行性(1)法律可行性
本系统的开发与应用不涉及侵犯专利权、侵犯版权等方面的问题。(2)管理可行性
系统操作起来难度不大,用户界面也很友好,操作人员无需掌握太多的计算机知识,只要稍加培训后,都可胜任工作,因此系统的运行和维护工作不会有什么障碍。系统提供容错能力,能识别操作员的明显的误操作,并对错误操作输入进行报警处理,对误操作进行恢复处理。
随着计算机的发展与普及,以及互联网技术的扩展,日常劳资人事管理必将实现无纸化办公,并且加入到公司内部的Intranet或者是Internet上去,实现数据的共享,这样有利于劳资人事信息在单位内部的查询,提高了数据资源的利用,并且能及时的得到更新,不需要象过去那样浪费大量的人力物力去进行抄写,提高了工作的效率。(3)技术可行性分析
软件:操作系统:中文Windows XP 操作简单:简单的操作规则使操作人员能轻松掌握。
查询方便:用户可设定任意条件和任意的查询项目进行检索。统计灵活,数据维护简单 工作方式:非实时联网。结论
本小组拟开发的系统操作方便灵活,便于学习,因此,该系统具有可行性。通过经济、技术、和社会等方面的可行性研究,可以确定本系统的开发完全必要,而且是可行的,可以立项开发
第三篇:C语言 课程设计 教师工资管理系统(职工工资管理系统)
课程设计 教师工资管理系统
运行平台:VC6.0(其他平台未经测试,不一定保证有效)
制作者:弓箭 中南大学 信息科学与工程学院
源代码如下:
#include
struct teacher { int num;char name[20];char sex[20];char workplace[50];char address[50];long phone;double de_salary;double de_jintie;double de_shenghuobutie;double yingfa_salary;double cost_phone;double cost_water_elec;double cost_rent;double cost_tax;double cost_weisheng;double cost_gongjijin;double cost_all;double shifa_salary;struct teacher *next;};
/***********************************读取函数************************************/ struct teacher *load(){ struct teacher *p1,*p2,*head;FILE *fp;int i=1;if((fp=fopen(“save”,“rb”))==NULL){
printf(“
文件不存在!按下任意键返回主菜单...”);getch();
return(NULL);} else {
head=NULL;
p1=(struct teacher *)malloc(LEN);
while(fread(p1,LEN-4,1,fp)==1)
{
if(i==1)
{
head=p1;
p2=p1;
i=2;
}
else
{
p2->next=p1;
p2=p2->next;
}
p1=(struct teacher *)malloc(LEN);
}
p2->next=NULL;
free(p1);
fclose(fp);
return(head);} }
/**********************************欢迎菜单函数*************************************/ void welcome(){ printf(“nnn
>>>>>欢迎使用教师工资管理系统Beta1.2<<<< *******************************************************n”);printf(“ * C语言课程设计 教师工资管理系统 *n”); printf(“ * 班级: 电气信息类1001班 学号:0909100119 *n”);printf(“ * 姓名:弓箭 *n”);printf(“ *******************************************************n”);printf(“nn 按下任意键进入系统...”);getch();system(“cls”);} /**********************************制作人员名单*************************************/ void list(){ system(“cls”);printf(“nnn >>>>>版权所有 侵权必究<<<< 学校(College): 中南大学 Central South University *n”);printf(“* 软件名称(Software): 教师工资管理系统 Teacher's Salary Managing System *n”); printf(“* 版本号(Edition): Beta1.2 *n”);printf(“* 制作人(Producer): 弓箭 James *n”);printf(“* 所在班级(Class): 电气信息类1001班 Electric Information 1001 *n”);printf(“* 所在学院(Institute):信息科学与工程学院 Information Engineering Institute*n”);printf(“*******************************************************************************n”);printf(“ >>>>>ILLEGAL COPY BANNED<<<< 按下任意键返回主菜单...”);getch();} /***********************************菜单函数*****************************************/ int menu(){ int i;printf(“nnn >>>>>欢迎使用教师工资管理系统Beta1.2<<<< *******************************************************n”);printf(“ * 1.输入教师信息 *n”);printf(“ * 2.插入教师信息 *n”);printf(“ * 3.修改教师信息 *n”);printf(“ * 4.删除教师信息 *n”);printf(“ * 5.浏览教师信息 *n”);printf(“ * 6.显示制作人员名单 *n”);printf(“ * 7.退出系统 *n”);printf(“ *******************************************************n”);printf(“ 请输入你想要的操作:”);scanf(“%d”,&i);getchar();return i;} /***********************************插入函数*****************************************/ void input(){ struct teacher *head,*p1,*p2,*p3,*px;int i,t;FILE *fp;char k,n='n',num[30],name[20];p1=p2=p3=px=(struct teacher *)malloc(LEN);if((head=load())!=NULL){ do { n='n'; printf(“ 请输入要插入的教师信息:n”); printf(“ ------------------------------n”); printf(“ 请输入教工号:”);gets(num);px->num=atoi(num); printf(“ 请输入姓名:”);gets(px->name); printf(“ 请输入性别:”);gets(px->sex); printf(“ 请输入单位名称:”);gets(px->workplace); printf(“ 请输入家庭住址:”);gets(px->address); printf(“ 请输入联系电话:”);gets(num);px->phone=atoi(num); printf(“ 请输入基本工资:”);gets(num);px->de_salary=atof(num); printf(“ 请输入津贴:”);gets(num);px->de_jintie=atof(num); printf(“ 请输入生活补贴:”);gets(num);px->de_shenghuobutie=atof(num); printf(“ 请输入电话费:”);gets(num);px->cost_phone=atof(num); printf(“ 请输入水电费:”);gets(num);px->cost_water_elec=atof(num); printf(“ 请输入房租:”);gets(num);px->cost_rent=atof(num); printf(“ 请输入个人所得税:”);gets(num);px->cost_tax=atof(num); printf(“ 请输入卫生费:”);gets(num);px->cost_weisheng=atof(num); printf(“ 请输入公积金:”);gets(num);px->cost_gongjijin=atof(num); px->yingfa_salary=px->de_salary+px->de_jintie+px->de_shenghuobutie; px->cost_all=px->cost_phone+px->cost_water_elec+px->cost_rent+px->cost_tax+px->cost_weisheng+px->cost_gongjijin; px->shifa_salary=px->yingfa_salary-px->cost_all; printf(“ 数据输入完毕,按下任意键继续...”);getch(); system(“cls”); printf(“nnn >>>>>>>>>>> 插入教师信息 <<<<<<<<<< printf(“ *******************************************************n”); printf(“ * 1.输入教师号 *n”); printf(“ * 2.输入姓名 *n”); printf(“ * 3.返回上级菜单 *n”); printf(“ *******************************************************n”); printf(“ 请选择插入方式:”); scanf(“%d”,&i);getchar(); while(i<1||i>3) { printf(“ 输入有误!请重新输入:”); scanf(“%d”,&i);getchar(); } switch(i) { case 1:printf(“ 请输入要插入在哪条数据后面:”); scanf(“%d”,&t);getchar(); p1=head; while(p1->num!=t) { if(p1->next!=NULL) { p1=p1->next; } else { printf(“ 查找不到相关数据!n”); break; } } if(p1->num==t) { printf(“-----------------------------要插入的信息如下:-n”); printf(“教工号 姓名 性别 单位名称 家庭住址 联系电话n”); printf(“ %-4d %-13s %s %-19s %-19s%-14ldn”,px->num,px->name,px->sex,px->workplace,px->address,px->phone); printf(“电话费 水电费 房租 个人所得税 卫生费 公积金 合计扣款n”); printf(“ %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lfn”,px->cost_phone,px->cost_water_elec,px->cost_rent,px->cost_tax,px->cost_weisheng,px->cost_gongjijin,px->cost_all); printf(“基本工资 津贴 生活补贴 应发工资 实发工资n”); printf(“ %-13.1lf %-13.1lf %-13.1lf %-13.1lf %-13.1lfn”,px->de_salary,px->de_jintie,px->de_shenghuobutie,px->yingfa_salary,px->shifa_salary); printf(“-----------------n”); printf(“ 确定插入吗?(y或n):”); scanf(“%c”,&k);getchar(); } if(k=='y'||k=='Y') { if(p1->num==t) { if(p1==head)/*如果插入点为头指针*/ { p3=p1->next; p1->next=px; px->next=p3; p2=head; } else if(p1->next==NULL)/*如果插入点为末尾指针*/ { p3=p1;p1=head;p2=head; while(p1->next!=p3) {p1=p1->next;} p1=p1->next; p1->next=px; px->next=NULL; } else{/*如果插入点为中间指针*/ p3=p1;p1=head;p2=head; while(p1->next!=p3) {p1=p1->next;} p1=p1->next; p3=p1->next; px->next=p3; p1->next=px; } if((fp=fopen(“save”,“wb”))==NULL) { printf(“ 文件不存在!按下任意键返回主菜单...”);getch(); } else { do { fwrite(p2,LEN-4,1,fp); if(p2->next!=NULL) p2=p2->next; }while(p2->next!=NULL); if(p2!=head) fwrite(p2,LEN-4,1,fp); }fclose(fp); printf(“ 插入成功!按下任意键继续...”);getch();} } else {printf(“ 插入已被取消!按下任意键继续...”);getch();} break;case 2:printf(“ 请输入要插入的教师姓名:”);gets(name);p1=head; while(strcmp((p1->name),name)!=0) { if(p1->next!=NULL) p1=p1->next; else { printf(“ 查找不到相关数据!n”); break; } } if(strcmp((p1->name),name)==0) { printf(“-----------------------------要插入的信息如下:-n”); printf(“教工号 姓名 性别 单位名称 家庭住址 联系电话n”); printf(“ %-4d %-13s %s %-19s %-19s%-14ldn”,p1->num,p1->name,p1->sex,p1->workplace,p1->address,p1->phone); printf(“电话费 水电费 房租 个人所得税 卫生费 公积金 合计扣款n”); printf(“ %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf n”,p1->cost_phone,p1->cost_water_elec,p1->cost_rent,p1->cost_tax,p1->cost_weisheng,p1->cost_gongjijin,p1->cost_all); printf(“基本工资 津贴 生活补贴 应发工资 实发工资n”); printf(“ %-13.1lf %-13.1lf %-13.1lf %-13.1lf %-13.1lfn”,p1->de_salary,p1->de_jintie,p1->de_shenghuobutie,p1->yingfa_salary,p1->shifa_salary); printf(“-----------------n”); printf(“ 确定插入吗?(y或n):”); scanf(“%c”,&k);getchar(); } if(k=='y'||k=='Y') { if(strcmp((p1->name),name)==0) { if(p1==head)/*如果插入点为头指针*/ { p1->next=px; p2=head; } else if(p1->next==NULL)/*如果插入点为末尾指针*/ { p3=p1;p1=head;p2=head; while(p1->next!=p3) } {p1=p1->next;} p1=p1->next; p1->next=px; px->next=NULL; } else{/*如果插入点为中间指针*/ p3=p1;p1=head;p2=head; while(p1->next!=p3) {p1=p1->next;} p1=p1->next; p1->next=px; p3=p3->next; px->next=p3; } if((fp=fopen(“save”,“wb”))==NULL) { printf(“ 文件不存在!按下任意键返回主菜单...”);getch(); } else { do { fwrite(p2,LEN-4,1,fp); if(p2->next!=NULL) p2=p2->next; }while(p2->next!=NULL); if(p2!=head) fwrite(p2,LEN-4,1,fp); }fclose(fp); printf(“ 插入成功!按下任意键继续...”);getch(); } } else {printf(“ 插入已被取消!按下任意键继续...”);getch();} break;case 3:break;default :break;} if(i!=3){ printf(“n 继续插入其他教师的信息吗?(y或n)”);scanf(“%c”,&n);getchar();} }while((n=='y'||n=='Y')&&i!=3); printf(“ 数据插入成功!按下任意键返回主菜单...”);getch(); getchar();} /***********************************输入函数*****************************************/ void insert(){ FILE *fp;char m,num[30]; struct teacher *p1;p1=(struct teacher *)malloc(LEN);if((fp=fopen(“save”,“ab”))==NULL){ printf(“ 文件不存在!按下任意键返回主菜单...”);getch();} else { printf(“ 请输入教师信息:n”); do { printf(“ ------------------------------n”); printf(“ 请输入教工号:”);gets(num);p1->num=atoi(num); printf(“ 请输入姓名:”);gets(p1->name); printf(“ 请输入性别:”);gets(p1->sex); printf(“ 请输入单位名称:”);gets(p1->workplace); printf(“ 请输入家庭住址:”);gets(p1->address); printf(“ 请输入联系电话:”);gets(num);p1->phone=atoi(num); printf(“ 请输入基本工资:”);gets(num);p1->de_salary=atof(num); printf(“ 请输入津贴:”);gets(num);p1->de_jintie=atof(num); printf(“ 请输入生活补贴:”);gets(num);p1->de_shenghuobutie=atof(num); printf(“ 请输入电话费:”);gets(num);p1->cost_phone=atof(num); printf(“ 请输入水电费:”);gets(num);p1->cost_water_elec=atof(num); printf(“ 请输入房租:”);gets(num);p1->cost_rent=atof(num); printf(“ 请输入个人所得税:”);gets(num);p1->cost_tax=atof(num); printf(“ 请输入卫生费:”);gets(num);p1->cost_weisheng=atof(num); printf(“ 请输入公积金:”);gets(num);p1->cost_gongjijin=atof(num); p1->yingfa_salary=p1->de_salary+p1->de_jintie+p1->de_shenghuobutie; p1->cost_all=p1->cost_phone+p1->cost_water_elec+p1->cost_rent+p1->cost_tax+p1->cost_weisheng+p1->cost_gongjijin; p1->shifa_salary=p1->yingfa_salary-p1->cost_all; fwrite(p1,LEN-4,1,fp); printf(“ 输入下一个?(y或n)”); m=getchar(); if(m!='y'&&m!='Y') {printf(“ 数据保存成功!按下任意键返回主菜单...”);getch();} getchar(); }while(m=='y'||m=='Y');} fclose(fp);} /***********************************修改函数*****************************************/ void modify(){ struct teacher *head,*p1,*p2;int i;FILE *fp;char m='n',n='n',num2[30];p1=head=(struct teacher *)malloc(LEN);if((head=load())!=NULL){ do { int num=0; char name[20]; p1=head; system(“cls”); printf(“nnn >>>>>>>>>>> 修改教师信息 <<<<<<<<<< printf(“ *******************************************************n”); printf(“ * 1.输入教师号 *n”); printf(“ * 2.输入姓名 *n”); printf(“ * 3.返回上级菜单 *n”); printf(“ *******************************************************n”); printf(“ 请选择修改方式:”); scanf(“%d”,&i);getchar(); while(i<1||i>3) { printf(“ 输入有误!请重新输入:”); scanf(“%d”,&i);getchar(); } switch(i) { case 1:printf(“ 请输入要修改的教师号:”); scanf(“%d”,&num);getchar(); while(p1->num!=num) { if(p1->next!=NULL) p1=p1->next; else { printf(“ 查找不到相关数据!n”); break; } } if(p1->num==num) { system(“cls”); printf(“nnn >>>>>欢迎使用教师工资管理系统Beta1.2<<<< printf(“---原信息如下:--n”); printf(“教工号 姓名 性别 单位名称 家庭住址 联系电话n”); printf(“ %-4d %-13s %s %-19s %-19s%-14ldn”,p1->num,p1->name,p1->sex,p1->workplace,p1->address,p1->phone); printf(“电话费 水电费 房租 个人所得税 卫生费 公积金 合计扣款n”); printf(“ %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lfn”,p1->cost_phone,p1->cost_water_elec,p1->cost_rent,p1->cost_tax,p1->cost_weisheng,p1->cost_gongjijin,p1->cost_all); printf(“基本工资 津贴 生活补贴 应发工资 实发工资n”); printf(“ %-13.1lf %-13.1lf %-13.1lf %-13.1lf %-13.1lfn”,p1->de_salary,p1->de_jintie,p1->de_shenghuobutie,p1->yingfa_salary,p1->shifa_salary); printf(“-----------------n”); printf(“ *******************************************************n”); printf(“ * 1.教师号 2.姓名 *n”); printf(“ * 3.性别 4.单位名称 *n”); printf(“ * 5.家庭住址 6.联系电话 *n”); printf(“ * 7.基本工资 8.津贴 *n”); printf(“ * 9.生活补贴 10.电话费 *n”); printf(“ * 11.水电费 12.房租 *n”); printf(“ * 13.所得税 14.卫生费 *n”); printf(“ * 15.公积金 *n”); printf(“ *******************************************************n”); do { printf(“ 请选择要修改的数据:”); scanf(“%d”,&i);getchar(); while(i>15||i<1) { printf(“ 输入有误!请重新输入:”); scanf(“%d”,&i);getchar(); } switch(i) { case 1:printf(“ 请输入新教师号:”);gets(num2);p1->num=atoi(num2);break; case 2:printf(“ 请输入新姓名:”);gets(p1->name);break; case 3:printf(“ 请输入新性别:”);gets(p1->sex);break; case 4:printf(“ 请输入新单位名称:”);gets(p1->workplace);break; case 5:printf(“ 请输入新家庭住址:”);gets(p1->address);break; case 6:printf(“ 请输入新联系电话:”);gets(num2);p1->phone=atoi(num2);break; case 7:printf(“ 请输入新基本工资:”);gets(num2);p1->de_salary=atof(num2);break; case 8:printf(“ 请输入新津贴:”);gets(num2);p1->de_jintie=atof(num2);break; case 9:printf(“ 请输入新生活补贴:”);gets(num2);p1->de_shenghuobutie=atof(num2);break; case 10:printf(“ 请输入新电话费:”);gets(num2);p1->cost_phone=atof(num2);break; case 11:printf(“ 请输入新水电费:”);gets(num2);p1->cost_water_elec=atof(num2);break; case 12:printf(“ 请输入新房租:”);gets(num2);p1->cost_rent=atof(num2);break; case 13:printf(“ 请输入新所得税:”);gets(num2);p1->cost_tax=atof(num2);break; case 14:printf(“ 请输入新卫生费:”);gets(num2);p1->cost_weisheng=atof(num2);break; case 15:printf(“ 请输入新公积金:”);gets(num2);p1->cost_gongjijin=atof(num2);break; default:break; } p1->yingfa_salary=p1->de_salary+p1->de_jintie+p1->de_shenghuobutie; p1->cost_all=p1->cost_phone+p1->cost_water_elec+p1->cost_rent+p1->cost_tax+p1->cost_weisheng+p1->cost_gongjijin; p1->shifa_salary=p1->yingfa_salary-p1->cost_all; printf(“ 继续修改其他数据吗?(y或n):”); scanf(“%c”,&m);getchar(); }while(m=='y'||m=='Y'); p2=head; if((fp=fopen(“save”,“wb”))==NULL) { printf(“ 文件不存在!按下任意键返回主菜单...”);getch(); } else { fwrite(head,LEN-4,1,fp); do { p2=p2->next; fwrite(p2,LEN-4,1,fp); }while(p2->next!=NULL); printf(“------------------------------修改后数据如下:--n”); printf(“教工号 姓名 性别 单位名称 家庭住址 联系电话n”); printf(“ %-4d %-13s %s %-19s %-19s%-14ldn”,p1->num,p1->name,p1->sex,p1->workplace,p1->address,p1->phone); printf(“电话费 水电费 房租 个人所得税 卫生费 公积金 合计扣款n”); printf(“ %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf n”,p1->cost_phone,p1->cost_water_elec,p1->cost_rent,p1->cost_tax,p1->cost_weisheng,p1->cost_gongjijin,p1->cost_all); printf(“基本工资 津贴 生活补贴 应发工资 实发工资n”); printf(“ %-13.1lf %-13.1lf %-13.1lf %-13.1lf %-13.1lfn”,p1->de_salary,p1->de_jintie,p1->de_shenghuobutie,p1->yingfa_salary,p1->shifa_salary); printf(“-----------------n”); } fclose(fp); } break; case 2:printf(“ 请输入要修改的教师姓名:”); gets(name); while(strcmp(p1->name,name)!=0) { if(p1->next!=NULL) p1=p1->next; else { printf(“ 查找不到相关数据!n”); break; } } if(strcmp(p1->name,name)==0) { system(“cls”); printf(“nnn >>>>>欢迎使用教师工资管理系统Beta1.2<<<< printf(“---原信息如下:--n”); printf(“教工号 姓名 性别 单位名称 家庭住址 联系电话n”); printf(“ %-4d %-13s %s %-19s %-19s%-14ldn”,p1->num,p1->name,p1->sex,p1->workplace,p1->address,p1->phone); printf(“电话费 水电费 房租 个人所得税 卫生费 公积金 合计扣款n”); printf(“ %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf n”,p1->cost_phone,p1->cost_water_elec,p1->cost_rent,p1->cost_tax,p1->cost_weisheng,p1->cost_gongjijin,p1->cost_all); printf(“基本工资 津贴 生活补贴 应发工资 实发工资n”); printf(“ %-13.1lf %-13.1lf %-13.1lf %-13.1lf %-13.1lfn”,p1->de_salary,p1->de_jintie,p1->de_shenghuobutie,p1->yingfa_salary,p1->shifa_salary); printf(“-----------------n”); printf(“ *******************************************************n”); printf(“ * 1.教师号 2.姓名 *n”); printf(“ * 3.性别 4.单位名称 *n”); printf(“ * 5.家庭住址 6.联系电话 *n”); printf(“ * 7.基本工资 8.津贴 *n”); printf(“ * 9.生活补贴 10.电话费 *n”); printf(“ * 11.水电费 12.房租 *n”); printf(“ * 13.所得税 14.卫生费 *n”); printf(“ * 15.公积金 *n”); printf(“ *******************************************************n”); do { printf(“ 请选择要修改的数据:”); scanf(“%d”,&i);getchar(); while(i>15||i<1) { printf(“ 输入有误!请重新输入:”); scanf(“%d”,&i);getchar(); } switch(i) { case 1:printf(“ 请输入新教师号:”);gets(num2);p1->num=atoi(num2);break; case 2:printf(“ 请输入新姓名:”);gets(p1->name);break; case 3:printf(“ 请输入新性别:”);gets(p1->sex);break; case 4:printf(“ 请输入新单位名称:”);gets(p1->workplace);break; case 5:printf(“ 请输入新家庭住址:”);gets(p1->address);break; case 6:printf(“ 请输入新联系电话:”);gets(num2);p1->phone=atoi(num2);break; case 7:printf(“ 请输入新基本工资:”);gets(num2);p1->de_salary=atof(num2);break; case 8:printf(“ 请输入新津贴:”);gets(num2);p1->de_jintie=atof(num2);break; case 9:printf(“ 请输入新生活补贴:”);gets(num2);p1->de_shenghuobutie=atof(num2);break; case 10:printf(“ 请输入新电话费:”);gets(num2);p1->cost_phone=atof(num2);break; case 11:printf(“ 请输入新水电费:”);gets(num2);p1->cost_water_elec=atof(num2);break; case 12:printf(“ 请输入新房租:”);gets(num2);p1->cost_rent=atof(num2);break; case 13:printf(“ 请输入新所得税:”);gets(num2);p1->cost_tax=atof(num2);break; case 14:printf(“ 请输入新卫生费:”);gets(num2);p1->cost_weisheng=atof(num2);break; case 15:printf(“ 请输入新公积金:”);gets(num2);p1->cost_gongjijin=atof(num2);break; default:break; } p1->yingfa_salary=p1->de_salary+p1->de_jintie+p1->de_shenghuobutie; p1->cost_all=p1->cost_phone+p1->cost_water_elec+p1->cost_rent+p1->cost_tax+p1->cost_weisheng+p1->cost_gongjijin; p1->shifa_salary=p1->yingfa_salary-p1->cost_all; printf(“ 继续修改其他数据吗?(y或n):”); scanf(“%c”,&m);getchar(); }while(m=='y'||m=='Y'); p2=head; if((fp=fopen(“save”,“wb”))==NULL) { printf(“ 文件不存在!按下任意键返回主菜单...”);getch(); } else { fwrite(head,LEN-4,1,fp); do { p2=p2->next; fwrite(p2,LEN-4,1,fp); }while(p2->next!=NULL); printf(“------------------------------修改后数据如下:--n”); printf(“教工号 姓名 性别 单位名称 家庭住址 联系电话n”); printf(“ %-4d %-13s %s %-19s %-19s%-14ldn”,p1->num,p1->name,p1->sex,p1->workplace,p1->address,p1->phone); printf(“电话费 水电费 房租 个人所得税 卫生费 公积金 合计扣款n”); printf(“ %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf n”,p1->cost_phone,p1->cost_water_elec,p1->cost_rent,p1->cost_tax,p1->cost_weisheng,p1->cost_gongjijin,p1->cost_all); printf(“基本工资 津贴 生活补贴 应发工资 实发工资n”); printf(“ %-13.1lf %-13.1lf %-13.1lf %-13.1lf %-13.1lfn”,p1->de_salary,p1->de_jintie,p1->de_shenghuobutie,p1->yingfa_salary,p1->shifa_salary); printf(“-----------------n”); } fclose(fp); } break; case 3:break; default :break; } if(i!=3) { printf(“n 继续修改其他教师的信息吗?(y或n)”); scanf(“%c”,&n); } }while((n=='y'||n=='Y')&&i!=3);} } /***********************************删除函数*****************************************/ void deletes(){ struct teacher *head,*p1,*p2,*p3;int i;char k;FILE *fp;char n='n';p1=p2=p3=(struct teacher *)malloc(LEN);if((head=load())!=NULL){ do { int num; char name[20]; p1=head; system(“cls”); printf(“nnn >>>>>>>>>>> 删除教师信息 <<<<<<<<<< printf(“ *******************************************************n”); printf(“ * 1.输入教师号 *n”); printf(“ * 2.输入姓名 *n”); printf(“ * 3.返回上级菜单 *n”); printf(“ *******************************************************n”); printf(“ 请选择删除方式:”); scanf(“%d”,&i);getchar(); while(i<1||i>3) { printf(“ 输入有误!请重新输入:”); scanf(“%d”,&i);getchar(); } switch(i) { case 1:printf(“ 请输入要删除的信息的教师号:”); scanf(“%d”,&num);getchar(); while(p1->num!=num) { if(p1->next!=NULL) p1=p1->next; else { printf(“ 查找不到相关数据!n”); break; } } if(p1->num==num) { printf(“-----------------------------要删除的信息如下:-n”); printf(“教工号 姓名 性别 单位名称 家庭住址 联系电话n”); printf(“ %-4d %-13s %s %-19s %-19s%-14ldn”,p1->num,p1->name,p1->sex,p1->workplace,p1->address,p1->phone); printf(“电话费 水电费 房租 个人所得税 卫生费 公积金 合计扣款n”); printf(“ %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lfn”,p1->cost_phone,p1->cost_water_elec,p1->cost_rent,p1->cost_tax,p1->cost_weisheng,p1->cost_gongjijin,p1->cost_all); printf(“基本工资 津贴 生活补贴 应发工资 实发工资n”); printf(“ %-13.1lf %-13.1lf %-13.1lf %-13.1lf %-13.1lfn”,p1->de_salary,p1->de_jintie,p1->de_shenghuobutie,p1->yingfa_salary,p1->shifa_salary); printf(“-----------------n”); printf(“ 确定删除吗?(y或n):”);scanf(“%c”,&k);getchar();} if(k=='y'||k=='Y'){ if(p1->num==num){ if(p1==head){ p1=p1->next; p2=p1;} else if(p1->next==NULL) { p3=p1;p1=head;p2=head; while(p1->next!=p3) {p1=p1->next;} p1->next=NULL; } else{ p2=head;p3=p1;p1=head; while(p1->next!=p3) {p1=p1->next;} p3=p3->next; p1->next=p3; } if((fp=fopen(“save”,“wb”))==NULL){ printf(“ 文件不存在!按下任意键返回主菜单...”);getch();} else { do { fwrite(p2,LEN-4,1,fp); if(p2->next!=NULL) p2=p2->next; }while(p2->next!=NULL);if(p2!=head) fwrite(p2,LEN-4,1,fp);}fclose(fp);printf(“ 删除成功!按下任意键继续...”);getch();} } else {printf(“ 删除已被取消!按下任意键继续...”);getch();} break; case 2:printf(“ 请输入要修改的教师姓名:”); gets(name); while(strcmp((p1->name),name)!=0) { if(p1->next!=NULL) p1=p1->next; else { printf(“ 查找不到相关数据!n”); break; } } if(strcmp((p1->name),name)==0) { printf(“-----------------------------要删除的信息如下:-n”); printf(“教工号 姓名 性别 单位名称 家庭住址 联系电话n”); printf(“ %-4d %-13s %s %-19s %-19s%-14ldn”,p1->num,p1->name,p1->sex,p1->workplace,p1->address,p1->phone); printf(“电话费 水电费 房租 个人所得税 卫生费 公积金 合计扣款n”); printf(“ %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf n”,p1->cost_phone,p1->cost_water_elec,p1->cost_rent,p1->cost_tax,p1->cost_weisheng,p1->cost_gongjijin,p1->cost_all); printf(“基本工资 津贴 生活补贴 应发工资 实发工资n”); printf(“ %-13.1lf %-13.1lf %-13.1lf %-13.1lf %-13.1lfn”,p1->de_salary,p1->de_jintie,p1->de_shenghuobutie,p1->yingfa_salary,p1->shifa_salary); printf(“-----------------n”); printf(“ 确定删除吗?(y或n):”); scanf(“%c”,&k);getchar(); } if(k=='y'||k=='Y') { if(strcmp((p1->name),name)==0) { if(p1==head) { p1=p1->next; p2=p1; } } else if(p1->next==NULL) { p3=p1;p1=head;p2=head; while(p1->next!=p3) {p1=p1->next;} p1->next=NULL; } else{ p2=head;p3=p1;p1=head; while(p1->next!=p3) {p1=p1->next;} p3=p3->next; p1->next=p3; } if((fp=fopen(“save”,“wb”))==NULL) { printf(“ 文件不存在!按下任意键返回主菜单...”);getch(); } else { do { fwrite(p2,LEN-4,1,fp); if(p2->next!=NULL) p2=p2->next; }while(p2->next!=NULL); if(p2!=head) fwrite(p2,LEN-4,1,fp); }fclose(fp); printf(“ 删除成功!按下任意键继续...”);getch(); } } else {printf(“ 删除已被取消!按下任意键继续...”);getch();} break;case 3:break;default :break;} if(i!=3){ printf(“n 继续删除其他教师的信息吗?(y或n)”);scanf(“%c”,&n);} }while((n=='y'||n=='Y')&&i!=3);} /***********************************浏览函数*****************************************/ void scan(){ struct teacher *head,*p1;int i;char m='n';p1=head=(struct teacher *)malloc(LEN);if((head=load())!=NULL){ system(“cls”); printf(“nnn >>>>>>>>>>> 浏览教师信息 <<<<<<<<<< printf(“ *******************************************************n”); printf(“ * 1.全部浏览 *n”); printf(“ * 2.单个浏览 *n”); printf(“ * 3.返回上级菜单 *n”); printf(“ *******************************************************n”); printf(“ 请输入你想要的操作:”); scanf(“%d”,&i);getchar(); while(i<1||i>3) { printf(“ 输入有误!请重新输入:”); scanf(“%d”,&i);getchar(); } switch(i) { case 1:p1=head; printf(“----------------------------所有保存的信息如下:n”); printf(“教工号 姓名 性别 单位名称 家庭住址 联系电话n”); do { printf(“ %-4d %-13s %s %-19s %-19s%-14ld”,p1->num,p1->name,p1->sex,p1->workplace,p1->address,p1->phone); if(p1->next!=NULL) {p1=p1->next;} else break; }while(1); p1=head; printf(“电话费 水电费 房租 个人所得税 卫生费 公积金 合计扣款n”); do { printf(“ %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf ”,p1->cost_phone,p1->cost_water_elec,p1->cost_rent,p1->cost_tax,p1->cost_weisheng,p1->cost_gongjijin,p1->cost_all); if(p1->next!=NULL) {p1=p1->next;} else break; }while(1); p1=head; printf(“基本工资 津贴 生活补贴 应发工资 实发工资n”); do { printf(“ %-13.1lf %-13.1lf %-13.1lf %-13.1lf %-13.1lf n”,p1->de_salary,p1->de_jintie,p1->de_shenghuobutie,p1->yingfa_salary,p1->shifa_salary); if(p1->next!=NULL) {p1=p1->next;} else break; }while(1); p1=head; printf(“n-----------------n”); printf(“ 按下任意键返回主菜单...”); getch(); break; case 2: do { int num=0; char name[20]; p1=head; system(“cls”); printf(“nnn >>>>>>>>>>> 浏览教师信息 <<<<<<<<<< printf(“ *******************************************************n”); printf(“ * 1.输入教师号 *n”); printf(“ * 2.输入姓名 *n”); printf(“ *******************************************************n”); printf(“ 请输入你想要的操作:”); scanf(“%d”,&i);getchar(); while(i<1||i>2) { printf(“ 输入有误!请重新输入:”); scanf(“%d”,&i);getchar(); } switch(i) { case 1:printf(“ 请输入要查询的教师号:”); scanf(“%d”,&num);getchar(); while(p1->num!=num) { if(p1->next!=NULL) p1=p1->next; else { printf(“ 查找不到相关数据!n”); break; } } if(p1->num==num) { printf(“所查信息如下:---n”); printf(“教工号 姓名 性别 单位名称 家庭住址 联系电话n”); printf(“ %-4d %-13s %s %-19s %-19s%-14ldn”,p1->num,p1->name,p1->sex,p1->workplace,p1->address,p1->phone); printf(“电话费 水电费 房租 个人所得税 卫生费 公积金 合计扣款n”); printf(“ %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf n”,p1->cost_phone,p1->cost_water_elec,p1->cost_rent,p1->cost_tax,p1->cost_weisheng,p1->cost_gongjijin,p1->cost_all); printf(“基本工资 津贴 生活补贴 应发工资 实发工资n”); printf(“ %-13.1lf %-13.1lf %-13.1lf %-13.1lf %-13.1lfn”,p1->de_salary,p1->de_jintie,p1->de_shenghuobutie,p1->yingfa_salary,p1->shifa_salary); printf(“-----------------n”); } break; case 2:printf(“ 请输入要查询的教师姓名:”); gets(name); while(strcmp(p1->name,name)!=0) { if(p1->next!=NULL) p1=p1->next; else { printf(“ 查找不到相关数据!n”); break; } } if(strcmp(p1->name,name)==0) { printf(“所查信息如下:---n”); printf(“教工号 姓名 性别 单位名称 家庭住址 联系电话n”); printf(“ %-4d %-13s %s %-19s %-19s%-14ldn”,p1->num,p1->name,p1->sex,p1->workplace,p1->address,p1->phone); printf(“电话费 水电费 房租 个人所得税 卫生费 公积金 合计扣款n”); printf(“ %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf %-10.1lf n”,p1->cost_phone,p1->cost_water_elec,p1->cost_rent,p1->cost_tax,p1->cost_weisheng,p1->cost_gongjijin,p1->cost_all); printf(“基本工资 津贴 生活补贴 应发工资 实发工资n”); printf(“ %-13.1lf %-13.1lf %-13.1lf %-13.1lf %-13.1lfn”,p1->de_salary,p1->de_jintie,p1->de_shenghuobutie,p1->yingfa_salary,p1->shifa_salary); printf(“-----------------n”); } break; default :break; } printf(“ 继续浏览吗?(y或n)”); scanf(“%c”,&m); }while(m=='y'||m=='Y'); case 3:break; } } } /***********************************主函数*****************************************/ void main(){ int a=1;welcome();while(1){ system(“cls”); a=menu();switch(a){ case 1:insert();break; } case 2:input();break;case 3:modify();break;case 4:deletes();break;case 5:scan();break;case 6:list();break;case 7:printf(“ 欢迎下次使用!”);getch();exit(0);break;default :printf(“ 输入有误,请重新输入!”);getch();break;} } getch(); Form1: Dim errorCount As Integer Private Sub Command1_Click()If Text1.Text = “system” And Text2.Text = “1234” Then Load Form2 Form2.Show Me.Hide MsgBox “登陆成功,欢迎您进入职工工资管理系统”, vbInformation, “登陆成功” Else errorCount = errorCount + 1 If errorCount < 3 Then MsgBox “用户名或密码错误(第” & errorCount & “次)!”, vbOKOnly + vbExclamation, “登陆失败” Text1.SetFocus End If If errorCount >= 3 Then Text1.Enabled = False Text2.Enabled = False Command1.Enabled = False MsgBox “三次输入用户名或密码错误,程序将自动退出!”, vbOKOnly + vbExclamation, “登陆失败” End End If End If End Sub Private Sub Command2_Click()Unload Me End Sub Private Sub Form_Load()errorCount = 0 End Sub Private Sub Form_Unload(Cancel As Integer)If MsgBox(“是否要退出程序?”, vbYesNo, “退出提示”)= vbNo Then Cancel = 1 End If End Sub For i = 1 To jlNum ygList(i).shifagongzi =(CSng(ygList(i).jibengz)+ ygList(i).gerensui CSng(ygList(i).jingtie) ygList(y).shifagongzi = ygList(zuishao).shifagongzi ygList(zuishao).shifagongzi = linShi.shifagongzi End If Next loadData End Sub Private Sub Command5_Click()Dim linShi As YuanGong linShi.ygnamg = InputBox(“请输入要添加的姓名”, “添加员工-姓名录入”)If Len(Trim(linShi.ygnamg))> 0 Then linShi.jibengz = InputBox(“请输入添加员工的基本工资”, “添加员工-基本工资录入”) If Len(Trim(linShi.jibengz))> 0 Then linShi.jingtie = InputBox(“请输入添加员工的津贴”, “添加员工-津贴录入”) If Len(Trim(linShi.jingtie))> 0 Then linShi.gerensui = InputBox(“请输入添加员工的个人所得税”, “添加员工-个税录入”) If Len(Trim(linShi.gerensui))> 0 Then linShi.suidianfei = InputBox(“请输入添加员工的水电费”, “添加员工-水电费录入”) If Len(Trim(linShi.suidianfei))> 0 Then Open filedir For Append As #1 Write #1, linShi.ygnamg;linShi.jibengz;linShi.jingtie;linShi.gerensui;linShi.suidianfei Close #1 MsgBox “添加员工成功!”, vbOKOnly + vbInformation, “成功” jlNum = 0 If Len(Trim(filedir))> 0 Then Open filedir For Input As #1 Do While Not EOF(1) Line Input #1, a If Len(Trim(a))> 0 Then jlNum = jlNum + 1 End If Loop Close #1 ReDim Preserve ygList(jlNum)As YuanGong jlNum = 0 Open filedir For Input As #1 Do While Not EOF(1) jlNum = jlNum + 1 Input #1, ygList(jlNum).ygnamg Input #1, ygList(jlNum).jibengz Input #1, ygList(jlNum).jingtie Next Close #1 MsgBox “删除员工成功!”, vbOKOnly + vbInformation, “成功” jlNum = 0 If Len(Trim(filedir))> 0 Then Open filedir For Input As #1 Do While Not EOF(1) Line Input #1, a If Len(Trim(a))> 0 Then jlNum = jlNum + 1 End If Loop Close #1 ReDim ygList(jlNum)As YuanGong jlNum = 0 Open filedir For Input As #1 Do While Not EOF(1) jlNum = jlNum + 1 Input #1, ygList(jlNum).ygnamg Input #1, ygList(jlNum).jibengz Input #1, ygList(jlNum).jingtie Input #1, ygList(jlNum).gerensui Input #1, ygList(jlNum).suidianfei Loop Close #1 loadData Command2.Enabled = True Command3.Enabled = False Command4.Enabled = False Command5.Enabled = True Command6.Enabled = True End If Text1.Text = “姓名” & vbTab & “工资” & vbTab & “津贴” & vbTab & “所得税” & vbTab & “水电费” & vbCrLf For i = 1 To jlNum Text1.Text = Text1.Text & ygList(i).ygnamg & vbTab & ygList(i).jibengz & vbTab & ygList(i).jingtie & vbTab & ygList(i).gerensui & vbTab & ygList(i).suidianfei & vbCrLf Next Else MsgBox “删除员工失败!”, vbOKOnly + vbExclamation, “失败” End If End Sub Private Sub Command7_Click() 《C语言程序设计》考试系统 C language progamme design examination system 马国富 刘波 (安阳工学院 计算机工程系,河南 安阳455000) Ma GuoFu,liu bo (Department of Computer Engineering,Anyang Institute of Technology,Anyang 455000) 一:摘要 这一考试系统是一种计算机辅助教学软件,它包括教学模式,练习模式,考试模式。采用调用数据库的方式打开,可以实现随机选题和指定选题,而不是固定的试题。解决了由于教材更新和题库更新导致教学软件过时。大大提高了软件的利用价值,打破了教学软件内容的固化,其次三种工作模式极大地拓宽了软件的使用范围,不再是单一的教师教学软件或学生考试软件。可根据教学需要灵活地选择不同模式,同时少作修改即可用于其它课程。 系统解决了在多媒体教学中出现的模式僵化,内容固化的问题。更新教学内容只需建立一个新的数据源实现连接即可。 Abstract The test system of the principle is a Computer extended education software, and this course is also the compulsory course in High etc.school.This system include Teaching mode.Practice mode Examination mode.You can use database open the examination database That is to say the content is up to you or at random.It is the revolution of test system This is the main reason we develop it.二:关键词 考试系统、多媒体技术、数据源、连接数据库 keyword examination system、multimedia technology、data soure、connection of database 三:课题研究的意义和目的 安阳工学院计科系毕业论文 2 3.1研究意义 现在,多媒体技术日趋成熟,多媒体系统以其能输出精彩的图形和图像、美妙的声音、动感的画面赢得了用户和社会各界广泛的关注和应用。如果把按传统考试方式同现代化的多媒体技术相结合,并且用多媒体著作工具及其它多媒体技术,编制一套符合高校考试需求的系统及其配套的多媒体教学软件,利用多媒体技术生动、直观、形象展示信息的特点,辅助教师授课和学生进行考试,尤其对部分有限制性的实验环节,可利用活动视频技术进行展示,这将会解决一系列目前存在的问题。总之,该课题是在计算机辅助教学及考试上进行的一次积极有意义的尝试,为其他实践性较强的课程进行多媒体辅助教学开辟一条新的路子,具有一定的理论和现实意义。 3.2目 的 传统的考试手段主要依靠有纸试卷,几乎没有可重用性。本课题将实现:用计算机辅助考试系统,把多媒体生动、直观的显示出来,使学生不再将考试视为一种枯燥无味的东西,提高了考试效果,使学生在一种愉悦的心情中进行考试,把枯燥的重复变为充满乐趣、具有启发性的考试过程,使学生能比较全面的学习知识,掌握技能,达到素质教育的要求。 四:系统流程图设计 4.1 初始化流程设计 在使用Authorware创建任何多媒体项目的时候,都应该先设置当前项目文件的窗口大小,将其设置为“800×600”,然后选择“演示居中屏幕”,同时取消对“显示标题栏”和“显示菜单栏”复选框的选择。 4.2 主界面的设计 本界面采用了Photoshop7.0图形图像处理软件来绘制。为了避免界面的单调和呆板,用蒙版和滤镜技术加以美化。该界面把Photoshop中的图层技术、图层蒙版技术、文字效果及滤镜等功能完美的结合了起来。并且在底部设置了一个Flash动画,增加视觉效果。 4.3背景音乐的交互控制 该多媒体教学以MIDI作为背景音乐,背景音乐的交互控制包括背景音乐的随机选曲播放、停止等功能,另外当该教学程序处于活动状态时,能够随时调整背景音乐和讲解声音的大小及比例,让使用者在一种轻松悦耳的环境中考试(调出WINDOWS的音量控制实现),还能够暂停背景音乐,当再次进入活动状态时则能重新播放背景音乐。 为了充分考虑用户计算机的不同配置情况,首先利用BUDAPI.U32的BASOUNDCARD函数判断用户机器是否已经安装了声卡,如果已经安装则执行背景音乐播放,否则不允许播放任何背景音乐操作.安阳工学院计科系毕业论文 3 程序如下: IF BASOUNDCARD()THEN MIDI:=1 TEST(MIDI,MIDILOOP(FILELOCATION^”MUSICMUSIC-”^RANDOM(1,5,1)^”.MID”),STOPMIDI())END IF 软件中的背景音乐交互控制是通过交互响应来实现的。在程序执行过程中,用户始终可以通过按钮控制背景音乐的播放与暂停。在计算图标“播放音乐”后添加一交互图标并命名为“音乐控制”,并在交互图标右边添加三个计算分支。设置“STOP/PLAY”分支为按钮响应交互,其功能是实现对背景音乐的控制。由于在整个程序执行过程中它都是有效的,因此须设置其为永久按钮,即选择“PERPETUAL”属性选项,同时设置“ACTIVE IF”条件为:BASOUNDCARD(),即检测到用户没有安装声卡的情况下该按钮及响应分支无效。 4.4内容的导航设计 该多媒体教学涉及内容繁多,不仅包括文本、图片、声音和动画,而且还有其它多媒体工具与Authorware 配合,同时,还把视频文件导入,以增加实用性。为使用户操作简单方便,设计了合理的教学内容导航。主文件与各章节之间的导航设计根据结构规划中的该章节内容的栏目划分,在流程设计中为这些栏目设计了导航,如图1为主程序内容导航的设计流程图。 图1 主程序内容导航 这样的流程设计使整个主程序结构清晰,可读性强。由于该文件结构是主-分结构,即主文件调用各章节模块文件的方式,因此在主文件的章节内容中实际存放的是一个起链接桥梁作用的调用脚 安阳工学院计科系毕业论文 4 本,而具体的考试试题题型内容则放在各章节的模块文件内。 4.5各模块的内容流程设计 图中的考试模式、练习模式、教学模式及退出系统这四部分主要程序流程图如下图 2、图 3、图 4、图5所示。 图2 安阳工学院计科系毕业论文 5 图3 图4 图5 安阳工学院计科系毕业论文 6 看每题的回答情况.最后回到选题主界面,并把学生所做的答案成绩保存到数据库中。 当用户在主界面中,选择了“考试模式”后,系统就会进入到登录界面系统会提示输入用户名和密码,当输入后,点击“确定”后,系统将会进入到题型选择界面。在提示框中输入用户名和密码,我们点击“确定”后,就会进入到正式的单选题型界面中,选择“单选题”单击。 C语言程序设计考试系统的选择题从数据库中取出选择题,在一个界面上显示。利用三个热区域交互按钮“上一题”“下一题,”“完成”,按钮和四个热区域设置计算图标用来记录学生所选择的答案。在学生选择“完成”后,弹出学生做题的情况界面,然后回到选题主界面,并把学生所做的答案成绩保存到数据库中。 5.1“未命名”用来擦除以前的图像 5.1.1 打开“未命名”的属性,进入“未命名”的属性窗口。 5.1.2在“属性窗口”中单击擦除标签在设置过渡效果进行设置 5.1.3单击“确定”按钮 5.2 设置“单选界面”插入一个图像 5.2.1双击“单选界面”图标进入显示图标窗口 5.2.2单击 绘图工具箱 图标进行绘制一个和窗口矩形一样大的矩形 5.2.3设置矩形的颜色为“绿色” 5.2.4单击显示图标窗口的关闭按钮,关闭保存对“单选界面”的设置 5.3 设置交互“进入” 5.3.1在交互图标的右边拖放一个群组“单选” 5.3.2设置单选的热区为“按钮“ 5.3.3单击确定后,双击“选择”。 5.3.3.1“未命名”用来擦除上次运行的图形 5.3.3.2在“打开数据库”的输入如下源程序: 安阳工学院计科系毕业论文 7 hint0:=“您的数据库没有连接上......”--显示连接数据库的信息 title:=“数据库连接....” ODBChandle:=ODBCOpen(WindowHandle,“",”database“,”“,”“)--得到数据源 getrecord:=”select count(sequence)from erigister“--得到记录的个数 record:=ODBCExecute(ODBChandle,getrecord)if ODBChandle=0 then--测试连接数据库是否连接成功 MessageBox(WindowHandle,hint0,title,17)end if ODBCClose(ODBChandle)ODBChandle:=ODBCOpen(WindowHandle,”“,”database“,”“,”“)if ODBChandle=0 then MessageBox(WindowHandle,hint0,title,17)end if sqlstring1:=”select ssdb from erigister where sequence=“^record^”“-从表中选择单选库表题 ssdatabase:=ODBCExecute(ODBChandle,sqlstring1)getrecord:=”select count(sequence)from “^ssdatabase^”“ record:=ODBCExecute(ODBChandle,getrecord)--ssdb数据库的记录个数,以便产生随机数 sssum:=0 number1:=1 sui:=[] sui[1]:=Random(1,record,1)--下面程序用来产生一个随机数不能出现相同的题目 i:=2 repeat while i<=record flag:=0 repeat while flag=0 sui[i]:=Random(1,record,1)flag1:=0 repeat with p:=1 to i-1 if sui[i]=sui[p] then flag1:=1 end repeat if flag1=0 then flag:=1 end repeat i:=i+1 end repeat 5.3.3.3 在“做选择的背景”显示图标中设计单选题的界面如上图5.4 5.3.3.4 在“数据库的操作”中输入如下代码:在这里,我们就要实现对数据库的随机读取和跟踪答案的长短来选择界面 x:=0 ran:=sui[number1] result:=”“ record1:=Number(record) 安阳工学院计科系毕业论文 8 record:=record1--得到记录的个数 sqlstring1:=”select topic from “^ssdatabase^” where sequence=“^ran^”“分别得到选择题各项 sqlstring2:=”select a from “^ssdatabase^” where sequence=“^ran^”“ sqlstring3:=”select b from “^ssdatabase^” where sequence=“^ran^”“ sqlstring4:=”select c from “^ssdatabase^” where sequence=“^ran^”“ sqlstring5:=”select d from “^ssdatabase^” where sequence=“^ran^”“ sqlstring6:=”select result from “^ssdatabase^” where sequence=“^ran^”“ get1:=ODBCExecute(ODBChandle,sqlstring1)--get1得到选择题目内容 get2:=ODBCExecute(ODBChandle,sqlstring2)--get2得到选择项A内容 get3:=ODBCExecute(ODBChandle,sqlstring3)--get3得到选择项B内容 get4:=ODBCExecute(ODBChandle,sqlstring4)--get4得到选择项C内容 get5:=ODBCExecute(ODBChandle,sqlstring5)--get5得到选择项D内容 get6:=ODBCExecute(ODBChandle,sqlstring6)--get6得到选择题的答案 inputa:=1--用来设置热区域的激活条件 5.3.3.5 空“操作”用来设置跳转标志 5.3.3.6 在交互图标右边拖入四个热区域 在计算图标中从左到右的四个计算图标中输入: result:=”A“ result:=”b“ result:=”c“ result:=”d"在交互属性中设置激活条件为inputa=1: ,鼠标指针设置为标准鼠标指针,其它的为默认设置.其中result变量用来记录用户所选的答案.5.3.3.7拖一个交互图标“未命名”在它的右边拖两个计算图标为“上一题”和“下一题”,再拖一个群组“完成”放在“下一题”右边,设置热区为按钮。在“上一题”的激活条件中输入number1>1,鼠标指针设置为:标准的鼠标指针。在“下一题”的激活条件中输入:number1 六 结束语 根据对教师上课时课堂练习的分析,开发出该考试系统,主要是能够方便课堂练习,同时还可用于期中期末测试,该系统主要是针对《C语言程序设计》课程来设计的。对该系统做简单修改,即可用于其它课程。 参考文献 专著:王嘉宁 朱隽著 《Photoshop7.0中文版新概念百例》[M] 中国水利水电出版社 2004年4月 专著:龚祥国主编 《Photoshop图像处理实用教程》[M] 科学出版社 2002年 2月 专著: 王龙 金海主编 《Flash MX实战入门新概念》[M] 中国水利水电出版社 2005年5月 专著: 李恒著《Authorware 6.0多媒体实例大制作》[M] 冶金工业出版社 2002 年4月 专著: 袁海东著《Authorware 7.0教程 》[M] 电子工业出版社 2004年9月 专著: 郝蕾蕾著 《Authorware课件制作》[M] 中国水利水电出版社 2001年7月第四篇:vb课程设计 职工工资管理系统代码
第五篇:C语言程序设计考试系统