C语言程序设计期末大作业—教师工资管理系统(附程序设计报告)

本文主要是介绍C语言程序设计期末大作业—教师工资管理系统(附程序设计报告),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C语言大作业——教师工资管理系统

主要的难点在于文件读取
数据结构用的是链表

源码放上,直接粘贴复制就可以,我的C程大作业

具体的问题不懂的可以评论和私信,总之还是简单的
放张图片
程序设计报告可以私信我

在这里插入图片描述

#include<stdio.h> 
#include<stdlib.h>
#include<string.h>
#include<conio.h>
typedef struct teach{int number;char name[10];char sex[4];char unit[10];char address[15];char phone[11];float salary;float allowance;float life;float shouldPay;float telBill;float waterBill;float rent;float income_tax;float cleanBill;float fund;float total_deduct;float realPay;struct teach* next;
}teach;
teach *head=NULL; 
FILE *fp;
teach * number();
teach * name();
void show(teach *pr);
void show_all(); 
void read_file();
void kill(teach *pr);
void save(); 
void menu();
void add();
void change(teach *pr);
void revise();
void search();
void dele();
int test_number(int a);
int main()
{read_file();menu();
}
int test_number(int a)
{int t=1,f=0;teach *p;if(head==NULL){return f;}else{p=head;while(p->number!=a){p=p->next;if(p==NULL)return f;}printf("教师号已存在,请重新输入\n");return t;}
}void save()//存档 
{char filename[]="teacher.txt";fp=fopen(filename,"w");if(head==NULL){}else{teach *p=head;while(p!=NULL){fprintf(fp,"%s,%s,%s,%s,%s,%d,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f\n",p->name,p->sex,p->unit,p->address,p->phone,p->number,p->salary,p->allowance,p->life,p->shouldPay,p->telBill,p->waterBill,p->rent,p->income_tax,p->cleanBill,p->fund,p->total_deduct,p->realPay);p=p->next;}}fclose(fp);
}
void read_file()//文件读取 
{char filename[]="teacher.txt";fp=fopen(filename,"r+");if(fp==NULL){fp=fopen(filename,"w");if(fp==NULL)printf("\n\t文件创建失败");}else{int k,l=0,c=0;while((k=fgetc(fp))!=EOF){if(k=='\n'){if(c!=1)l++;}c++;}int number;char name[10];char sex[4];char unit[10];char address[15];char phone[11];float salary;float life; float allowance;float shouldPay;float telBill;float waterBill;float rent;float income_tax;float cleanBill;float fund;float total_deduct;float realPay;teach *p=(teach *)malloc(sizeof(teach));rewind(fp);for(int i=0;i<l;i++){ 	fscanf(fp,"%[^,],%[^,],%[^,],%[^,],%[^,],%d,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f\n",name,sex,unit,address,phone,&number,&salary,&allowance,&life,&shouldPay,&telBill,&waterBill,&rent,&income_tax,&cleanBill,&fund,&total_deduct,&realPay);teach *pn=(teach *)malloc(sizeof(teach));pn->number=number;strcpy(pn->name,name);strcpy(pn->sex,sex);strcpy(pn->unit,unit);strcpy(pn->address,address);strcpy(pn->phone,phone);pn->salary=salary;pn->life=life;pn->allowance=allowance;pn->shouldPay=shouldPay;pn->telBill=telBill;pn->waterBill=waterBill;pn->rent=rent;pn->income_tax=income_tax;pn->cleanBill=cleanBill;pn->fund=fund;pn->total_deduct=total_deduct;pn->realPay=realPay;pn->next=NULL;p->next=pn;p=pn;if(head==NULL){head=p;}}}fclose(fp);}void menu(){system("cls");char n;int x;printf("\t***************欢迎使用教师工资管理系统*****************\n\n");printf("\t-----------------------菜单列表-------------------------\n");printf("\t------------------[1]添加教师信息-----------------------\n");printf("\t------------------[2]修改教师信息-----------------------\n");printf("\t------------------[3]删除教师信息-----------------------\n");printf("\t------------------[4]查询教师信息-----------------------\n"); printf("\t------------------[0]退出程序---------------------------\n\n");printf("\t***********************welcome**************************\n");do{printf("请选择:");n=getchar(); switch(n){x=0;case '1':add();break;case '2':revise();break;case '3':dele();break;case '4':search();break;case '0':exit(0);break;default:printf("没有符合您选择的功能,请重新输入!");x=1;}}while(x==1); 
}
void add()//添加教师信息 
{system("cls");teach *pnew;pnew=(teach *)malloc(sizeof(teach));printf("\n");printf("请输入教师信息:");printf("\n");do{printf("请输入教师号:");scanf("%d",&pnew->number);}while(test_number(pnew->number));printf("请输入教师姓名:");scanf("%s",&pnew->name);printf("请输入教师性别:");scanf("%s",&pnew->sex);printf("请输入教师单位名称:");			scanf("%s",&pnew->unit);printf("请输入教师家庭住址:");scanf("%s",&pnew->address);printf("请输入教师的电话号码:");scanf("%s",&pnew->phone); printf("请输入教师基本工资:");scanf("%f",&pnew->salary);printf("请输入教师的津贴:");scanf("%f",&pnew->allowance);printf("请输入教师的生活补贴:");			scanf("%f",&pnew->life);printf("请输入教师的电话费:");scanf("%f",&pnew->telBill);printf("请输入教师的水电费:");scanf("%f",&pnew->waterBill);printf("请输入教师的房租:");scanf("%f",&pnew->rent);printf("请输入教师的所得税:");scanf("%f",&pnew->income_tax);printf("请输入教师的卫生费:");scanf("%f",&pnew->cleanBill);printf("请输入教师的公积金:");scanf("%f",&pnew->fund);pnew->shouldPay=pnew->salary+pnew->allowance+pnew->life;pnew->total_deduct=pnew->waterBill+pnew->telBill+pnew->rent+pnew->income_tax+pnew->waterBill+pnew->fund;pnew->realPay=pnew->shouldPay-pnew->total_deduct;
//		printf("教师号\t姓名\t性别\t单位\t家庭住址\t电话号\t基本工资\t津贴\t生活补贴\t电话费\t水电费\t房租\t所得税\t卫生费\t公积金\t应付工资\t合计扣款\t实付工资\n");
//		printf("%-04d\t %-6s\t %-2s\t %-10s\t %-11s\t %-11s\t %-.2f\t %-.2f\t %-.2f\t %-.2f\t %-.2f\t %-.2f\t %-.2f\t %-.2f\t %-.2f\t %-.2f\t %-.2f\t %-.2f\t \n",pnew->number,pnew->name,
//		pnew->sex,pnew->unit,pnew->address,pnew->phone,pnew->salary,pnew->life,pnew->telBill,pnew->waterBill,pnew->rent,pnew->income_tax,pnew->cleanBill,pnew->fund,pnew->shouldPay,pnew->total_deduct,pnew->realPay);printf("\n\t教师号:%d",pnew->number);printf("\n\t姓名:%s",pnew->name);printf("\n\t性别:%s",pnew->sex);printf("\n\t单位名称:%s",pnew->unit);printf("\n\t家庭住址:%s",pnew->address);printf("\n\t电话号码:%s",pnew->phone);printf("\n\t基本工资:%.5f",pnew->salary);printf("\n\t津贴:%.5f",pnew->allowance);printf("\n\t生活补贴:%.5f",pnew->life);printf("\n\t电话费:%.5f",pnew->telBill);printf("\n\t水电费:%.5f",pnew->waterBill);printf("\n\t房租:%.5f",pnew->rent);printf("\n\t所得税:%.5f",pnew->income_tax);printf("\n\t卫生费:%.5f",pnew->cleanBill);printf("\n\t公积金:%.5f",pnew->fund);printf("\n\t应发工资:%.5f",pnew->shouldPay);printf("\n\t合计扣款:%.5f",pnew->total_deduct);printf("\n\t实发工资:%.5f",pnew->realPay);printf("\n确认录入该教师的信息吗?  y/n");if(getch()=='y'){ if(head==NULL){head=pnew;head->next=NULL;printf("录入成功!\n");save();printf("按任意键回到主菜单");getch();getchar();menu();return;}if(head->number>pnew->number){teach *pr=head;head=pnew;head->next=pr;}else{teach *p;teach *bf;p=head;while(p->number<pnew->number){bf=p;p=p->next;if(p==NULL){bf->next=pnew;pnew->next=NULL;printf("录入成功!\n");save();printf("\n-------按任意键回到主菜单--------");getch();getchar();menu();return;}}pnew->next=p;bf->next=pnew;} printf("录入成功!\n");save();printf("\n-------按任意键回到主菜单--------");getch();getchar();menu();}else{printf("\n-------按任意键回到主菜单--------");getch();getchar();menu();return; }
}
void revise()//修改教师信息 
{getchar();system("cls");int x;int n; printf("\t***************欢迎使用教师工资管理系统*****************\n\n");printf("\t-----------------------菜单列表-------------------------\n");printf("\t------------------[1]根据教师号修改---------------------\n");printf("\t------------------[2]根据教师姓名修改-------------------\n");printf("\t------------------[3]回到主菜单-------------------------\n");  printf("\t------------------[0]退出程序---------------------------\n\n");printf("\t***********************welcome**************************\n");do{printf("请选择:");n=getchar();getchar(); switch(n){	teach *find;x=0;case '1':find=number();if(find!=NULL)change(find);break;case '2':find=name();if(find!=NULL)change(find);break;case '3':menu();break; case '0':exit(0);break;default:printf("没有符合您选择的功能,请重新输入!");x=1;}}while(x==1);
}
teach * number()//教师号查询 
{int a; printf("请输入教师号:\n");scanf("%d",&a);if(head==NULL){printf("系统中没有该教师号的信息\n");printf("\n-------按任意键回到主菜单--------");getch();getchar();menu();return NULL;}else{teach *p=head;while(a!=p->number){p=p->next;if(p==NULL){printf("系统中没有该教师号的信息\n");printf("\n-------按任意键回到主菜单--------");getch();getchar();menu();return NULL;}}return p;}
}
teach * name()//教师姓名查询 
{char id[10]="\0"; printf("请输入教师姓名:\n");gets(id);if(head==NULL)
{printf("系统中没有找到此教师\n");printf("\n-------按任意键回到主菜单--------");getch();getchar();menu();return NULL;}else{teach *p=head;while((strcmp(id,p->name))!=0){p=p->next;if(p==NULL){printf("系统中没有找到此教师\n");printf("\n-------按任意键回到主菜单--------");getch();getchar();menu();return NULL;}}return p;}
}
void change(teach *pr)
{teach *p;printf("\n\t******以下是你要修改的教师工资信息******\n");printf("\n\t教师号:%d",pr->number);printf("\n\t姓名:%s",pr->name);printf("\n\t性别:%s",pr->sex);printf("\n\t单位名称:%s",pr->unit);printf("\n\t家庭住址:%s",pr->address);printf("\n\t电话号码:%s",pr->phone);printf("\n\t基本工资:%.5f",pr->salary);printf("\n\t津贴:%.5f",pr->allowance);printf("\n\t生活补贴:%.5f",pr->life);printf("\n\t电话费:%.5f",pr->telBill);printf("\n\t水电费:%.5f",pr->waterBill);printf("\n\t房租:%.5f",pr->rent);printf("\n\t所得税:%.5f",pr->income_tax);printf("\n\t卫生费:%.5f",pr->cleanBill);printf("\n\t公积金:%.5f",pr->fund);printf("\n\t应发工资:%.5f",pr->shouldPay);printf("\n\t合计扣款:%.5f",pr->total_deduct);printf("\n\t实发工资:%.5f",pr->realPay);printf("\n\t\t是否修改?(y/n)");if(getch()=='y'){printf("\n\t请重新输入以下信息:\n");printf("请输入教师姓名:");scanf("%s",&pr->name);printf("请输入教师性别:");scanf("%s",&pr->sex);printf("请输入教师单位名称:");scanf("%s",&pr->unit);printf("请输入教师家庭住址:");scanf("%s",&pr->address);printf("请输入教师的电话号码:");scanf("%s",&pr->phone); printf("请输入教师基本工资:");scanf("%f",&pr->salary);printf("请输入教师的津贴:");scanf("%f",&pr->allowance);printf("请输入教师的生活补贴:");scanf("%f",&pr->life);printf("请输入教师的电话费:");scanf("%f",&pr->telBill);printf("请输入教师的水电费:");scanf("%f",&pr->waterBill);printf("请输入教师的房租:");scanf("%f",&pr->rent);printf("请输入教师的所得税:");scanf("%f",&pr->income_tax);printf("请输入教师的卫生费:");scanf("%f",&pr->cleanBill);printf("请输入教师的公积金:");scanf("%f",&pr->fund);pr->shouldPay=pr->salary+pr->allowance+pr->life;pr->total_deduct=pr->waterBill+pr->telBill+pr->rent+pr->income_tax+pr->waterBill+pr->fund;pr->realPay=pr->shouldPay-pr->total_deduct;pr->number=pr->number;save();printf("--------修改成功!-------");printf("\n-------按任意键回到主菜单--------");getch();getchar();menu();}else{printf("\n-------按任意键回到主菜单--------");getch();getchar();menu();} 
}
void dele()
{getchar();system("cls");int x;char n; printf("\t***************欢迎使用教师工资管理系统*****************\n\n");printf("\t-----------------------菜单列表-------------------------\n");printf("\t------------------[1]根据教师号删除---------------------\n");printf("\t------------------[2]根据教师姓名删除-------------------\n");printf("\t------------------[3]回到主菜单-------------------------\n");  printf("\t------------------[0]退出程序---------------------------\n\n");printf("\t***********************welcome**************************\n");do{printf("请选择:");n=getchar(); getchar();switch(n){	teach *find;x=0;case '1':find=number();if(find!=NULL)kill(find);break;case '2':find=name();if(find!=NULL)kill(find);break;case '3':menu();break; case '0':exit(0);break;default:printf("没有符合您选择的功能,请重新输入!");x=1;}}while(x==1);
}
void kill(teach *pr)
{printf("\n\t******以下是你要删除的教师工资信息******\n");printf("\n\t教师号:%d",pr->number);printf("\n\t姓名:%s",pr->name);printf("\n\t性别:%s",pr->sex);printf("\n\t单位名称:%s",pr->unit);printf("\n\t家庭住址:%s",pr->address);printf("\n\t电话号码:%s",pr->phone);printf("\n\t基本工资:%.5f",pr->salary);printf("\n\t津贴:%.5f",pr->allowance);printf("\n\t生活补贴:%.5f",pr->life);printf("\n\t电话费:%.5f",pr->telBill);printf("\n\t水电费:%.5f",pr->waterBill);printf("\n\t房租:%.5f",pr->rent);printf("\n\t所得税:%.5f",pr->income_tax);printf("\n\t卫生费:%.5f",pr->cleanBill);printf("\n\t公积金:%.5f",pr->fund);printf("\n\t应发工资:%.5f",pr->shouldPay);printf("\n\t合计扣款:%.5f",pr->total_deduct);printf("\n\t实发工资:%.5f",pr->realPay);printf("\n\t\t是否删除?(y/n)");if(getch()=='y'){if(pr->number==head->number){head=head->next;free(pr);}else if(pr->next==NULL){teach *k;k=head;while(k->next!=pr){k=k->next;}k->next=NULL;}else{teach *d=head;while(d->next!=pr){d=d->next;}d->next=pr->next;}save();printf("\n---------删除成功!---------------");printf("\n-------按任意键回到主菜单--------");getch();menu();return;}else{printf("\n-------按任意键回到主菜单--------");getch();menu();return;}
}
void search()
{getchar();system("cls");int x; int n;printf("\t***************欢迎使用教师工资管理系统*****************\n\n");printf("\t-----------------------菜单列表-------------------------\n");printf("\t------------------[1]根据教师号查询---------------------\n");printf("\t------------------[2]根据教师姓名查询-------------------\n");printf("\t------------------[3]显示所有教师信息-------------------\n");printf("\t------------------[4]回到主菜单-------------------------\n");  printf("\t------------------[0]退出程序---------------------------\n\n");printf("\t***********************welcome**************************\n");do{printf("请选择:");n=getchar();getchar(); switch(n){	teach *find;x=0;case '1':find=number();if(find!=NULL)show(find);break;case '2':find=name();if(find!=NULL)show(find);break;case '3':show_all();break;case '4':menu();break; case '0':exit(0);break;default:printf("没有符合您选择的功能,请重新输入!");x=1;}}while(x==1);
}
void show(teach *pr)
{printf("\n\t******以下是你要查询的教师工资信息******\n");printf("\n\t教师号:%d",pr->number);printf("\n\t姓名:%s",pr->name);printf("\n\t性别:%s",pr->sex);printf("\n\t单位名称:%s",pr->unit);printf("\n\t家庭住址:%s",pr->address);printf("\n\t电话号码:%s",pr->phone);printf("\n\t基本工资:%.5f",pr->salary);printf("\n\t津贴:%.5f",pr->allowance);printf("\n\t生活补贴:%.5f",pr->life);printf("\n\t电话费:%.5f",pr->telBill);printf("\n\t水电费:%.5f",pr->waterBill);printf("\n\t房租:%.5f",pr->rent);printf("\n\t所得税:%.5f",pr->income_tax);printf("\n\t卫生费:%.5f",pr->cleanBill);printf("\n\t公积金:%.5f",pr->fund);printf("\n\t应发工资:%.5f",pr->shouldPay);printf("\n\t合计扣款:%.5f",pr->total_deduct);printf("\n\t实发工资:%.5f",pr->realPay);printf("\n-------按任意键回到主菜单--------");getch();getchar();menu();}
void show_all()
{teach *pnew;pnew=head;if(head==NULL){printf("系统中没有录入教师的数据\n");}while(pnew!=NULL){printf("教师号\t姓名\t性别\t单位\t家庭住址    电话号\t基本工资    津贴    生活补贴\t电话费\t水电费\t房租\t所得税\t  卫生费\t公积金\t应付工资    合计扣款    实付工资\n");printf("%-04d\t%-6s\t%-2s\t%-6s\t%-6s      %-6s\t%-.1f\t    %-.1f    %-.1f\t%-.1f\t%-.1f\t%-.1f\t %-.1f\t  %-.1f\t%-.1f\t%-.1f\t    %-.1f\t%-.1f\t\n",pnew->number,pnew->name,pnew->sex,pnew->unit,pnew->address,pnew->phone,pnew->salary,pnew->allowance,pnew->life,pnew->telBill,pnew->waterBill,pnew->rent,pnew->income_tax,pnew->cleanBill,pnew->fund,pnew->shouldPay,pnew->total_deduct,pnew->realPay);pnew=pnew->next;
}printf("\n-------按任意键回到主菜单--------");getch();menu();
}

这篇关于C语言程序设计期末大作业—教师工资管理系统(附程序设计报告)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382192

相关文章

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态: