java工资管理系统课程设计_课程设计,工资管理系统完整源代码_忧伤过半的博客-程序员秘密

技术标签: java工资管理系统课程设计  

展开全部

#include

#include

#include

#include

#define MONTH_NUM 5 /* 最多的月份 */

struct worker

{

int number; /* 每个62616964757a686964616fe4b893e5b19e31333264643163工人的工号 */

char name[15]; /* 每个工人的姓名 */

int salary[MONTH_NUM]; /* 每个工人M月的工资 */

int sum; /* 每个工人的总工资 */

float average; /* 每个工人的平均工资 */

struct worker *next;

};

typedef struct worker STU;

char Menu(void);

int Ascending(int a, int b);

int Descending(int a, int b);

void IntSwap(int *pt1, int *pt2);

void CharSwap(char *pt1, char *pt2);

void FloatSwap(float *pt1, float *pt2);

STU *AppendNode(STU *head, const int m);

STU *DeleteNode(STU *head, int nodeNum);

STU *ModifyNode(STU *head, int nodeNum, const int m);

STU *SearchNode(STU *head, int nodeNum);

STU *Appendsalary(STU *head, const int m);

void Totalsalary(STU *head, const int m);

void Printsalary(STU *head, const int m);

STU *Deletesalary(STU *head, const int m);

void Modifysalary(STU *head, const int m);

void Sortsalary(STU *head, const int m, int (*compare)(int a, int b));

void Searchsalary(STU *head, const int m);

void DeleteMemory(STU *head);

main()

{

char ch;

int m;

STU *head = NULL;

printf("输入要记录的月份(m<10):");

scanf("%d", &m);

while (1)

{

ch = Menu();

switch (ch)

{

case'1':head = Appendsalary(head, m);

Totalsalary(head, m);

break;

case'2':Printsalary(head, m);

break;

case'3':head = Deletesalary(head, m);

printf("\nAfter deleted\n");

Printsalary(head, m);

break;

case'4':Modifysalary(head, m);

Totalsalary(head, m);

printf("\nAfter modified\n");

Printsalary(head, m);

break;

case'5':Searchsalary(head, m);

break;

case'6':Sortsalary(head, m, Descending);

printf("\nsorted in descending order by sum\n");

Printsalary(head, m);

break;

case'7':Sortsalary(head, m, Ascending);

printf("\nsorted in ascending order by sum\n");

Printsalary(head, m);

break;

case'0':exit(0);

DeleteMemory(head);

printf("End of program!");

break;

default:printf("Input error!");

break;

}

}

}

char Menu(void)

{

char ch;

printf("\n管理工人的工资\n");

printf(" 1.添加记录\n");

printf(" 2.列出记录\n");

printf(" 3.删除记录\n");

printf(" 4.修改记录\n");

printf(" 5.查找记录\n");

printf(" 6.降序排列\n");

printf(" 7.升序排列\n");

printf(" 0.退出\n");

printf("请输入你的选择:");

scanf(" %c", &ch); /*在%c前面加一个空格,将存于缓冲区中的回车符读入*/

return ch;

}

STU *Appendsalary(STU *head, const int m)

{

int i = 0;

char c;

do{

head = AppendNode(head, m); /*向链表末尾添加一个节点*/

printf("你想添加一个新的记录吗(Y/N)?");

scanf(" %c",&c); /*%c前面有一个空格*/

i++;

}while (c=='Y' || c=='y');

printf("%d new nodes have been apended!\n", i);

return head;

}

STU *Deletesalary(STU *head, const int m)

{

int i = 0, nodeNum;

char c;

do{

printf("请输入你想删除的记录编号:");

scanf("%d", &nodeNum);

head = DeleteNode(head, nodeNum); /*删除工号为nodeNum的工人信息*/

Printsalary(head, m); /*显示当前链表中的各节点信息*/

printf("Do you want to delete a node(Y/N)?");

scanf(" %c",&c); /*%c前面有一个空格*/

i++;

}while (c=='Y' || c=='y');

printf("%d nodes have been deleted!\n", i);

return head;

}

void Modifysalary(STU *head, const int m)

{

int i = 0, nodeNum;

char c;

do{

printf("请输入你想修改的记录编号:");

scanf("%d", &nodeNum);

head = ModifyNode(head, nodeNum, m); /*修改工号为nodeNum的节点*/

printf("Do you want to modify a node(Y/N)?");

scanf(" %c",&c); /*%c前面有一个空格*/

i++;

}while (c=='Y' || c=='y');

printf("%d nodes have been modified!\n", i);

}

void Totalsalary(STU *head, const int m)

{

STU *p = head;

int i;

while (p != NULL) /*若不是表尾,则循环*/

{

p->sum = 0;

for (i=0; i

{

p->sum += p->salary[i];

}

p->average = (float)p->sum / m;

p = p->next; /*让p指向下一个节点*/

}

}

void Sortsalary(STU *head, const int m, int (*compare)(int a, int b))

{

STU *pt;

int flag = 0, i;

do{

flag = 0 ;

pt = head;

/*若后一个节点的总工资比前一个节点的总工资高,则交换两个节点中的数据

注意只交换节点数据,而节点顺序不变,即节点next指针内容不进行交换*/

while (pt->next != NULL)

{

if ((*compare)(pt->next->sum, pt->sum))

{

IntSwap(&pt->number, &pt->next->number);

CharSwap(pt->name, pt->next->name);

for (i=0; i

{

IntSwap(&pt->salary[i], &pt->next->salary[i]);

}

IntSwap(&pt->sum, &pt->next->sum);

FloatSwap(&pt->average, &pt->next->average);

flag = 1;

}

pt = pt->next;

}

}while(flag);

}

/*交换两个整型数*/

void IntSwap(int *pt1, int *pt2)

{

int temp;

temp = *pt1;

*pt1 = *pt2;

*pt2 = temp;

}

/*交换两个实型数*/

void FloatSwap(float *pt1, float *pt2)

{

float temp;

temp = *pt1;

*pt1 = *pt2;

*pt2 = temp;

}

/*交换两个字符串*/

void CharSwap(char *pt1, char *pt2)

{

char temp[15];

strcpy(temp, pt1);

strcpy(pt1, pt2);

strcpy(pt2, temp);

}

/*决定数据是否按升序排序,a

int Ascending(int a, int b)

{

return a < b;

}

/* 决定数据是否按降序排序,a>b为真,则按降序排序 */

int Descending(int a, int b)

{

return a > b;

}

void Searchsalary(STU *head, const int m)

{

int number, i;

STU *findNode;

printf("请输入你想查找的记录编号:");

scanf("%d", &number);

findNode = SearchNode(head, number);

if (findNode == NULL)

{

printf("Not found!\n");

}

else

{

printf("\nNo.%3d%8s", findNode->number, findNode->name);

for (i=0; i

{

printf("%7d", findNode->salary[i]);

}

printf("%9d%9.2f\n", findNode->sum, findNode->average);

}

}

void Printsalary(STU *head, const int m)

{

STU *p = head;

char str[100] = {'\0'}, temp[3];

int i, j = 1;

strcat(str, "Number Name ");

for (i=1; i<=m; i++)

{

strcat(str, "salary");

itoa(i,temp, 10);

strcat(str, temp);

strcat(str, " ");

}

strcat(str," sum average");

printf("%s", str); /* 打印表头 */

while (p != NULL) /*若不是表尾,则循环打印*/

{

printf("\nNo.%3d%15s", p->number, p->name);

for (i=0; i

{

printf("%7d", p->salary[i]);

}

printf("%9d%9.2f", p->sum, p->average);

p = p->next; /*让p指向下一个节点*/

j++;

}

printf("\n");

}

STU *AppendNode(STU *head, const int m)

{

STU *p = NULL;

STU *pr = head;

int j;

p = (STU *)malloc(sizeof(STU)); /*为新添加的节点申请内存*/

if (p == NULL) /*若申请内存失败,则打印错误信息,退出程序*/

{

printf("No enough memory to alloc");

exit(0);

}

if (head == NULL) /*若原链表为空表,则将新建节点置为首节点*/

{

head = p;

}

else /*若原链表为非空,则将新建节点添加到表尾*/

{

/*若未到表尾,则继续移动指针pr,直到pr指向表尾*/

while (pr->next != NULL)

{

pr = pr->next;

}

pr->next = p; /*将新建节点添加到链表的末尾*/

}

pr = p; /*让pr指向新建节点*/

printf("Input node data......");

printf("\nInput number:");

scanf("%d", &p->number);

printf("Input name:");

scanf("%s", p->name);

for (j=0; j

{

printf("Input salary%d:", j+1);

scanf("%d", p->salary+j);

}

pr->next = NULL; /*将新建节点置为表尾*/

return head; /*返回添加节点后的链表的头节点指针*/

}

STU *ModifyNode(STU *head, int nodeNum, const int m)

{

int j;

STU *newNode;

newNode = SearchNode(head, nodeNum);

if (newNode == NULL)

{

printf("Not found!\n");

}

else

{

printf("Input the new node data:\n");

printf("Input name:");

scanf("%s", newNode->name);

for (j=0; j

{

printf("Input salary%d:", j+1);

scanf("%d", newNode->salary+j);

}

}

return head;

}

STU *DeleteNode(STU *head, int nodeNum)

{

STU *p = head, *pr = head;

if (head == NULL) /*链表为空,没有节点,无法删除节点*/

{

printf("No Linked Table!\n");

return(head);

}

/*若没找到节点nodeNum且未到表尾,则继续找*/

while (nodeNum != p->number && p->next != NULL)

{

pr = p;

p = p->next;

}

if (nodeNum == p->number) /*若找到节点nodeNum,则删除该节点*/

{

if (p == head) /*若待删节点为首节点,则让head指向第2个节点*/

{

head = p->next;

}

else /*若待删节点非首节点,则将前一节点指针指向当前节点的下一节点*/

{

pr->next = p->next;

}

free(p); /*释放为已删除节点分配的内存*/

}

else /*没有找到待删除节点*/

{

printf("This Node has not been found!\n");

}

return head; /*返回删除节点后的链表的头节点指针*/

}

STU *SearchNode(STU *head, int nodeNum)

{

STU *p = head;

int j = 1;

while (p != NULL) /*若不是表尾,则循环*/

{

if (p->number == nodeNum) return p;

p = p->next; /*让p指向下一个节点*/

j++;

}

return NULL;

}

void DeleteMemory(STU *head)

{

STU *p = head, *pr = NULL;

while (p != NULL) /*若不是表尾,则释放节点占用的内存*/

{

pr = p; /*在pr中保存当前节点的指针*/

p = p->next; /*让p指向下一个节点*/

free(pr); /*释放pr指向的当前节点占用的内存*/

}

}

凑合着用吧,一些缺少的功能自己加上去就行了。。。

追问

不好意思,我要的可以窗口执行的,不是那种黑屏的

本回答由提问者推荐

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29807507/article/details/114246031

智能推荐

什么是I3C总线?它和I2C和SMBus是什么关系?_jk_101的博客-程序员秘密

计算机技术发展十分迅速,三十年前,一间房子大小的小型机的算力,到现在还比不上大家手机CPU的算力。令人吃惊的是,有这么一种38年前的技术,现在还在大家的电脑中运用十分广泛,甚至它的控制器在计算机中的个数在过去五年中增长了两倍,这项技术就是I2C (Inter-Integrated Circuit,IIC)总线。 就在某些新入行的同学还在纠结I2C和计算机中另一个相似总线SMBus的区别的时候,另一种替代I2C的新总线I3C已经出现在地平线上。春江水暖鸭先知,跟踪最新技术的朋友也许已经在Inte

php中curl使用案例(三)_Dobby Liu的博客-程序员秘密

通过调用webservice查询服务器数据(本应是查询天气,因接口不能使用,改成访问本地的文件)$data = 'theCityName=北京';$curl = curl_init();//设置请求的链接curl_setopt($curl,CURLOPT_URL,"http://localhost/work/return.php");#"http://www.webxml.com.cn...

(七)--ActiveMQ多节点集群_activemq集群3个节点只能启动一个_程序员B的博客-程序员秘密

1. 面试题引入消息队列之后该如何保证其高可用性?2. 是什么基于Zookeeper和LevelDB搭建ActiveMQ集群集群仅提供主备方式的高可用集群功能,避免单点故障3. zookeeper+replicated-leveldb-store的主从集群从ActiveMQ5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式.增加了基于Zookeep...

40-字符串类型内置方法_weixin_30311605的博客-程序员秘密

目录 字符串类型内置方法 一.字符串类型的概念 1.1 用途 1.2定义 二.常用操作及内置方法 2.1 基本操作 2.2 需要掌握 2.3其他操作 2.4 存一个值or多个值 ...

Rsyslog+H3C日志系统_weixin_33705053的博客-程序员秘密

一、交换机发送日志到linux主机[9F-3600V2-EI]info-center loghost 192.168.11.36[9F-3600V2-EI]info-center enable二、linux下配置 1.建立日志文件路径,路径可以修改[[email protected] h3c]# mkdir /var/log/h3c[[email protected]

记一次简单异常------系统升级后信息概率报错_starttelephonylistener transactnative_程立001的博客-程序员秘密

现象: 本地升级update升级后,提示信息停止运行堆栈: 04-14 06:42:17.747 2854 3279 E AndroidRuntime: FATAL EXCEPTION: TransactionService 04-14 06:42:17.747 2854 3279 E AndroidRuntime: Process: com.android.mms, PID: 2854 0

随便推点

React Native 在红米手机真机调试失败_小达学徒的博客-程序员秘密

使用npx react-native run-android 运行与红米 手机 显示以下错误解决方法:进入开发者选项-&gt;开启USB调试 和 USB调试(安全设置)重新运行 npx react-native run-android

【Android基础】listview控件的使用(3)------Map与SimpleAdapter组成的多显示条目的Listview_android listview map_赵凯强的博客-程序员秘密

前面介绍的两种listview的使用都是最基础的,所以有很大的局限性,比如只能在一个item(即每一行的条目)中显示一个文本信息,这一篇我将介绍Map与SimpleAdapter组成的多显示条目的Listview的使用方法,这样就可以在每个item中显示多个文本的信息先上效果图由于需要自定义item的布局,所以这次有两个布局文件主listview的布局文件<Line

Springboot maven多模块项目中集成Jedis使用Redis_IM_HJ的博客-程序员秘密

Springboot maven多模块项目中集成Jedis使用Redis项目结构添加maven依赖添加配置文件添加RedisConfig类加载配置文件内容在启动类中加注解扫描配置文件测试1. 在demo-iservice模块中添加接口ITestService类2. 在demo-service模块中添加接口实现类3. 在demo-web模块中添加借口测试结果项目结构项目结构如下笔者的redi...

ios系统多次点击onclick事件失效问题[email protected] 多次点击无效 ios_清栀丶的博客-程序员秘密

/*ios系统多次点击图片,只有最后一次点击后才触发jump*/&lt;img src="" onclick="jump()" class="pop"&gt;一开始以为是系统延迟,网络问题,后来发现是ios系统的原因。解决方法:function jump(){window.location.href = "https://www.jianshu.com/p/dc9144e37ade"...

推荐文章

热门文章

相关标签