C语言课程设计-工资管理系统

2023-10-29

前言

这个程序是博主在大学第一个学期学完C语言后的课程设计,那时刚从一个小白变得会一点点编程,老师就布置了这个课程设计,当时一脸懵这是啥?我在哪?我要干什么?

在这里插入图片描述

但是通过查阅了很多资料以及问了许多人以后,我逐渐开始写我的第一个项目,现在来看这个程序,仍然存在许多问题以及不足,代码略显稚嫩,但是当我学完大学又一门课程C++面向对象编程,以及初学Java以后,我逐渐开始走上编程的学习之路,(现在依旧很菜)学得越深,越多,越发现编程之路的深奥与魅力,才知学无止境。现在接触编程快一年了,再来看这个课设,颇有感慨,因此想来写一写这篇博客。

一、课题内容

设计一个小型工资管理系统,基本实现以下功能:

先来一个效果图:
在这里插入图片描述

(1)输入/添加记录:能够输入、添加多条记录到数据表中。
(2)显示、查询记录:根据用户要求按所给记录关键字显示、查询一个或多个相关记录。
(3)修改记录:能对任意存在的记录进行修改,并能显示修改后的数据。
(4)排序记录:能对记录进行排序,并能显示排序后的相关数据。
在正确、合理的软件功能规划的基础上,进行各功能模块的设计。切忌将多个功能模块混合一起进行调试。

二、具体功能实现及要求

在这里插入图片描述

三、结构化程序设计

结构化技术是软件工程中最成熟的技术之一,它包括结构化分析方法(Structured Analysis)、结构化设计方法(Structured design)和结构化程序设计方法( Structured Programming),简称为SA-SD-SP方法。它的总的指导思想是自顶向下、逐步求精、单入口/单出口,基本原则是抽象和功能的分解。对于较为复杂问题的大型程序开发,应采取“自顶向下、逐步细化和模块化”的设计方法,模块化程序设计是结构化程序设计方法在开发大型程序中的应用。
(1)自顶向下、逐步细化、逐步求精
所谓“自顶向下,逐步细化、逐步求精”就是在对于给定问题进行透彻的了解和详细的分析的基础上,把问题分解成若干个按顺序执行的逻辑部分,称为“模块”。每个子任务如果仍很复杂,还可以再分解为若干个子任务。如此逐层分解,对于每个模块的设计都采用这种“自顶向下、逐步细化”的方法,将它们分解成为基本结构为止,就如同写文章先拟出题目和中心内容,再确定分为几大部分,每一大部分又分哪几节,每一节分为几段,每一段包括哪几个意思。
(2)菜单技术
当一个程序的规模比较庞大,层次和模块比较多时,不要每次都将所有模块按顺序执行一遍,最好在每一层,至少在最高几层都设一个“菜单”。为方便用户操作,“菜单”技术已广泛使用在计算机的系统软件中,具体做法是:程序首先把各功能说明及相应代号以菜单形式显示在屏幕上,然后由用户在键盘上输入所选的功能代号,程序自动转去调用相应的功能模块进行处理。

四、模块分析

根据各个功能,一个功能便是一个模块。
这些基本的功能就不在此赘述了,这些功能的实现由非常多的方法。

以下是博主觉得可以增添的一些功能:这些也是同一年与我一起写的较好的同学的一些创意,除了老师要求的功能外,一些较为出彩的功能。(博主当时太菜了,最后只得了一个良,这些创意来自其他优秀的同学)(同是编程小白,为什么其他人可以那么强┭┮﹏┭┮)

  1. 登录功能:较为容易实现的一个功能,几行代码的事情,但是写出来就会让人觉得不一样。在主函数里加几行代码,登录成功就实现接下来的功能菜单,错误则重新开始。(就是这么简单,但是我当时没弄这个功能,结果和其他同学一比就low好多了)
  2. 文件保存功能:这里用到了一些C语言里的一些文件操作,这里可以通过查找资料去了解。(这个功能我用了芜湖~)
  3. 删除撤销功能:这个比较秀的一个操作,需要你去思考怎么实现它,有同学有了这个功能,直接拿优哦。
  4. 分平台登录功能:工资管理系统嘛,应该有后台管理与用户查询,题目要求里没这个,但是发挥一下自己的创造力嘛。很遗憾,我当时也没做这个功能。
  5. 报错功能:就输入的时候对其进行判断是否符合要求,但是我当时考虑不周,没有做这个功能。
  6. 窗体颜色变化:通过不同的操作界面给人不同的界面,这个也是可以添彩的地方。
  7. 制表:输出数据实现制表,菜单制表,可以让你的程序更好看

还有很多其他功能啊,就看你愿不愿意去做了,做了拿高分,收获其他同学崇拜目光,不做可能还会没有出彩的地方,像博主一样拿不到优。

代码实现

这是博主自己的代码,所以上面的那些出彩功能我没有~
这里采用了结构体实现
定义结构体:

typedef struct
{
	char number[15];//职工号//
	char name[10];//姓名//
	double basic;//基本工资//
	double post;//职务工资//
	double allow;//津贴//
	double insure1;//医保//
	double insure2;//养老保险//
	double insure3;//失业保险//
	double pub;//公积金//
	double wages,shui,total;//应发工资,税,实发工资// 
}list;
typedef struct
{
	list stu[maxsize];//职工数// 
	int len;
}linklist;
//以上为定义结构体// 

文件保存与读取:

void save(linklist &q)
{
	int j;
	FILE*fp;
	fp=fopen("date.txt","w+");
	for(j=1;j<=q.len;j++)
	{
		fprintf(fp,"%s %s %.2lf %.2lf %.2lf %.2lf% .2lf %.2lf %.2lf %.2lf %.2lf %.2lf\n",q.stu[j].number,q.stu[j].name,q.stu[j].basic,q.stu[j].post,q.stu[j].allow,q.stu[j].insure1,q.stu[j].insure2,q.stu[j].insure3,q.stu[j].pub,q.stu[j].wages,q.stu[j].shui,q.stu[j].total);
    }
    fclose(fp);
}
fp=fopen("date.txt","r");
    		   if(fp==NULL)
    		   {
    		    printf("打开失败\n");
    		    return-1;
			   }
    		   while(!feof(fp))
			   {   
			    fscanf(fp,"%s %s %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf\n",&q.stu[j].number,&q.stu[j].name,&q.stu[j].basic,&q.stu[j].post,&q.stu[j].allow,&q.stu[j].insure1,&q.stu[j].insure2,&q.stu[j].insure3,&q.stu[j].pub,&q.stu[j].wages,&q.stu[j].shui,&q.stu[j].total);
			    j++;
               }
    		   fclose(fp);

后面的各模块就不一一打出来了,我会完整的发一个。

五、总结

虽然这个程序最后只拿了良但是它毕竟是我一个一个敲出来的,第一个项目,所以,很有感情的,希望对初学的兄弟姐妹们有所帮助。码字不易期待您的点赞~
在这里插入图片描述
完整代码免费自取
源代码自取

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言课程设计-工资管理系统 的相关文章

  • Sum It Up HDU - 1258【DFS】

    Given a specified total t and a list of n integers find all distinct sums using numbers from the list that add up to t F
  • 十年资深建模师教你如何用zbrush在圆柱或曲面上雕刻花纹

    在圆柱上面或者是曲面比较大的模型上面制作花纹 如果我们直接使用笔刷雕或是用alpha拉出来 可能效果不是很好 对于这种情况 我们需要结合UV制作这样的图案 如果想更多了解游戏建模可以加入我们的游戏建模交流团1046 777 540 只有数字
  • 六、深入理解JDK1.8中HashMap哈希冲突解决方案

    导读 前面文章一 深入理解 Java集合初篇 中我们对Java的集合体系进行一个简单的分析介绍 上两篇文章二 Jdk1 7和1 8中HashMap数据结构及源码分析 三 JDK1 7和1 8HashMap数据结构及源码分析 续 中我们分别对
  • Java基础之【使用迭代器删除List中的元素】

    直接看代码以及代码中注释 iterator的remove跟list的remove区别是 迭代器会在remove后进行expectedModCount modCount操作 这样就会避免 ConcurrentModificationExcep
  • python+selenium尝试处理滑块验证

    效果如图 处理思路 1 打开滑动验证页面 这个用selenium一步一步走过去 2 将滑动验证码的整个图片保存下来 3 对图片的像素点进行分析 发现拼图处像素特征如下 1 阴影起点处rgb的第一个值为0 2 阴影处的rgb三个值相加大部分小
  • 【机器学习基础 2】matplotlib库

    目录 一 什么是matplotlib库 二 基本用法 1 绘制简单的线图 plot 函数 2 绘制散点图 scatter 函数 3 绘制条形图 bar 函数 4 绘制饼图 pie 函数 三 重要用法 1 设置样式 2 添加标签 3 设置坐标

随机推荐

  • C++动态库使用

    个人博客地址 https cxx001 gitee io 前言 Windows与Linux下面的动态链接库区别 1 文件后缀不同 Linux动态库的后缀是 so 文件 而window则是 dll 文件 2 文件格式不同 a Linux下是E
  • GT911电容触摸屏使用

    注 转载于https blog csdn net qlexcel article details 99696108 一 介绍与硬件连接 GT911 GT928 GT9147都属于GT9系列非单层多点触控芯片 他们支持的触控点数不同 GT92
  • 什么事IPC(Inter-Process Communication,进程间通信)

    进程间通信IPC 也就是Inter Process Communication的缩写 首先我们明白一个进程其实就是一个狭义上的程序 一个服务器也就是一个进程 比如客户端和服务器的连接就是两个进程在通信 只是这两个进程并不在同一台计算机上 它
  • wsl set default version: 请启用虚拟机平台 windows 功能并确保在 bios 中启用虚拟化

    前段时间电脑偶然间恢复了出厂设置 之前安装的docker之类的东西都得重来了 既然要安装docker 肯定得用到WSL 于是就想要先把WSL的版本切换到2 在运行了如下命令后出现了这么个问题 PS C Users me gt wsl set
  • ​广州地区高校福利来啦!6月29日华为云开发者沙龙门票限时免费领取!

    6月29日华为云开发者沙龙广州站开启报名 华为专家现场指导实操演示并有精品图书相送 了解行业趋势进行技术储备 高校教师 学生免费参会 报名地址 https click hm baidu com clk 7a57cac1ed530949ab0
  • 【Redis 6】缓存穿透、缓存雪崩、缓存击穿(附解决方案、代码)

    各位小伙伴们大家好 欢迎来到这个小扎扎的Redis 6专栏 在这个系列专栏中我对B站黑马的Redis教程进行一个总结 鉴于 看到就是学到 学到就是赚到 精神 这波依然是血赚 O Redis知识点速览 缓存穿透 原理以及解决方案 缓存空对象代
  • Redis入门

    1 前言 1 1 什么是Redis Redis是一个基于内存的key value结构数据库 Redis 是互联网技术领域使用最为广泛的存储中间件 它是 Remote Dictionary Service 的首字母缩写 也就是 远程字典服务
  • 断言(Assert)的用法

    一 概念 编写代码时 我们总是会做出一些假设 断言就是用于在代码中捕捉这些假设 可以将断言看作是异常处理的一种高级形式 使用断言可以创建更稳定 品质更好且不易于出错的代码 当需要在一个值为FALSE时中断当前操作的话 可以使用断言 单元测试
  • 二进制间距

    二进制间距 给定一个正整数 n 找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 如果不存在两个相邻的 1 返回 0 如果只有 0 将两个 1 分隔开 可能不存在 0 则认为这两个 1 彼此 相邻 两个 1 之间的距离是它们的
  • MySQL创建S,P,J,SPJ表,以及SQL语句

    MySQL创建S P J SPJ表 CREATE TABLE S SNO char 9 primary key SNAME char 9 STATUS char 9 CITY char 9 CREATE TABLE P PNO char 9
  • Linux休眠,挂起,待机,关机的区别及相关命令

    转 http blog 163 com kukwkukw 126 blog static 97095900201410672425693 体眠是一种更加省电的模式 它将内存中的数据保存于硬盘中 所有设备都停止工作 当再次使用时需按开关机键
  • 一文读懂深度学习框架下的目标检测(附数据集)

    从简单的图像分类到3D位置估算 在机器视觉领域里从来都不乏有趣的问题 其中我们最感兴趣的问题之一就是目标检测 如同其他的机器视觉问题一样 目标检测目前为止还没有公认最好的解决方法 在了解目标检测之前 让我们先快速地了解一下这个领域里普遍存在
  • 整理的最全 python常见面试题(基本必考)① ②③④⑤⑥⑦⑧⑨⑩

    1 大数据的文件读取 利用生成器generator 迭代器进行迭代遍历 for line in file 2 迭代器和生成器的区别 答 1 迭代器是一个更抽象的概念 任何对象 如果它的类有next方法和iter方法返回自己本身 对于stri
  • Vim进阶

    Vim实用技术 第1部分 实用技巧 http www ibm com developerworks cn linux l tip vim1 index html Vim实用技术 第2部分 常用插件 http www ibm com deve
  • 软件测试13个最容易犯的错误

    目录 一 输入框测试 二 搜索功能测试 三 添加 修改功能 四 删除功能 五 上传图片功能测试 六 查询结果列表 七 返回键检查 八 回车键检查 九 刷新键检查 十 直接URL链接检查 盗链问题 十一 并发问题 十二 业务流程测试 十三 界
  • nvme分区选mbr还是guid_Linux 扩容 / 根分区(LVM+非LVM)

    目录 1 概述 2 CentOS7 LVM根分区扩容步骤 3 CentOS7 非LVM根分区扩容步骤 一 背景 概述 MBR Master Boot Record 主引导记录 和GPT GUID Partition Table GUID意为
  • 和泉纱雾

    和泉纱雾 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Problem Description 众所周知 和泉纱雾是著名的埃罗芒阿老师 画画功力首屈一指 今天我们的埃罗
  • 长度大小为零的数组(柔性数组、可变数组)

    书山有路勤为径 学海无涯苦作舟 目录 前言 一 什么是柔性数组 二 柔性数组应用及优势对比 1 定长数组 2 指针域 3 柔性数组 总结 前言 柔性数组 Arrays of Length Zero 是GNU GCC在C C 标准下扩展而引出
  • 网络测速命令

    linux命令行测速 https blog 51cto com 13718210 2418661
  • C语言课程设计-工资管理系统

    前言 这个程序是博主在大学第一个学期学完C语言后的课程设计 那时刚从一个小白变得会一点点编程 老师就布置了这个课程设计 当时一脸懵这是啥 我在哪 我要干什么 但是通过查阅了很多资料以及问了许多人以后 我逐渐开始写我的第一个项目 现在来看这个