
#include <stdioh>
#include <stringh>
#include <malloch>
#include <stdlibh>
typedef struct Node //定义结点
{
long int born_time,work_time,tele_num;
char sex,name[50],degree[50],job[50],address[50];
struct Node next;
}EPNode;
typedef struct //定义数据域
{
long int born_time,work_time,tele_num;
char name[50],sex,degree[50],job[50],address[50];
}DataType;
void ListInitiate(EPNode head)//---------------------------------链表初始化
{
if((head=(EPNode )malloc(sizeof(EPNode)))==NULL)
exit(1);//动态分配存储空间
(head)->next=NULL;
}
EPNode ListInsert(EPNode head,DataType x)//-------------------职工信息的插入姓名并按照升序排列
{
EPNode p,q,s;
p=head->next;
if((q=(EPNode )malloc(sizeof(EPNode)))==NULL) exit(1);//动态分配存储空间
q->born_time=xborn_time;
q->work_time=xwork_time;
q->tele_num=xtele_num;
strcpy(q->name,xname);
q->sex=xsex;
strcpy(q->degree,xdegree);
strcpy(q->job,xjob);
strcpy(q->address,xaddress);
if(head->next==NULL){//如果只有链表的头结点,没有其他的结点,直接插入在头结点后面
head->next=q;
head->next->next=NULL;
}
else{//链表非空
for(;p;p=p->next){
if(p->next!=NULL){
if(strcmp(p->name,xname)<0&&strcmp(p->next->name,xname)>0){//位于两个结点之间
s=p->next;
p->next=q;
q->next=s;
break;
}
}
else if(strcmp(p->name,xname)<0&&p->next==NULL){//链表非空,并且在排序中是最后一个
p->next=q;
q->next=NULL;
break;
}
if(strcmp(p->name,xname)>0){//位于链表头结点之后的位置
s=head->next;
head->next=q;
q->next=s;
break;
}
}
}
return head;
}
void ListDelete(EPNode head)//-----------------------------职工信息的删除
{
EPNode p,s;
char x[20];
s=head;
p=head->next;
if(head->next==NULL){//链表为空,输出:名单中无职工信息,无须删除!
printf("名单中无职工信息,无须删除!\n");
return;
}
printf("请输入要删除职工的姓名:\n"); //输入要删除的人的姓名
scanf("%s",x);
for(p;p;p=p->next){//在链表中从头到尾查找输入的人的姓名
if(strcmp(p->name,x)==0){ //如果存在,则删除,否则输出:名单中无职工信息,无须删除!
s->next=p->next;
free(p);
printf("删除成功!请继续 *** 作!\n");
break;
}
s=p;
}
if(p==NULL){//链表本身为空
printf("名单中无职工信息,无须删除!\n");
}
}
void ListModify(EPNode head)//------------------------职工信息的修改
{
DataType x;
EPNode p;
p=head->next;
if(p==NULL){//链表本身为空
printf("职工名单无职工信息,无须修改!\n");
return;
}
printf("请输入要修改的职工姓名:\n");
scanf("%s",xname);
printf("依次写入该职工的新信息:\n");
for(;p;p=p->next)
{
if(strcmp(xname,p->name)==0){//查找到了该职工的信息
scanf("%s %c %d %d %s %s %s %d",p->name,&p->sex,&p->born_time,&p->work_time,p->degree,p->job,p->address,&p->tele_num);
printf("修改成功!请继续 *** 作!\n");
break;
}
}
if(p==NULL)//如果链表为空
printf("此职工不存在,无法修改其信息!\n");
}
void save(EPNode head,FILE fp)//--------------------职工信息的保存
{
EPNode p;
if((fp=fopen("职工名单txt","w"))==NULL){//
printf("无法打开'职工名单txt'!\n");
exit(0);
}
for(p=head->next;p;p=p->next)
{
fprintf(fp,"%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num);
}
if(fclose(fp)){
printf("无法关闭'职工名单txt'!\n"); exit(0);
}
}
void Listfind(EPNode head)//----------------------职工信息的查找
{
int i,j;
EPNode p;
DataType x;
if(headnext==NULL){//链表为空
printf("名单中无职工信息,无法查询!\n");
return;
}
//返回主菜单
printf("\n");
printf("\t 职工信息查询 *** 作 \n");
printf("\t\n");
printf("\t1对姓名进行查询2对出生年月进行查询3对学历进行查询 \n");
printf("\t\n");
printf("\t4对工作年月进行查询5对职务进行查询 6对住址进行查询 \n");
printf("\t\n");
printf("\t7对电话进行查询 0回到主菜单 \n");
printf("\t\n");
while(1)
{
printf("请输入您要选择的 *** 作:");
scanf("%d",&i);
if(i==0)//输入0,退出查询系统,回到主菜单
break;
else if(i==1){//输入1,对姓名进行查询
p=headnext;
printf("请输入姓名:");
scanf("%s",xname);
j=0;
for(p;p;p=p->next){
if(strcmp(p->name,xname)==0){//如果存在这个人,那么j自加
++j;
printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num);
}
}
if(j==0)//表示没有找到输入的信息
printf("职工名单中不存在此人!\n");
else printf("查询成功!请继续 *** 作!\n");
}
else if(i==2){//输入2,对出生年月进行查询
p=headnext;
printf("请输入出生年月:");
scanf("%d",&xborn_time);
j=0;
for(p;p;p=p->next){
if(p->born_time==xborn_time){//输入的出生年月在链表中存在
++j;//如果存在这个人,那么j自加
printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num);
}
}
if(j==0)//表示没有找到输入的信息
printf("职工名单中没有这个时间出生的!\n");
else printf("查询成功!请继续 *** 作!\n");
}
else if(i==4){//输入4,对工作年月进行查询
p=headnext;
printf("请输入工作年月:");
scanf("%d",&xwork_time);
j=0;
for(p;p;p=p->next){
if(p->work_time==xwork_time){
++j;//如果存在这个人,那么j自加
printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num);
}
}
if(j==0)//表示没有找到输入的信息
printf("职工名单中没有这个时间工作的!\n");
else printf("查询成功!请继续 *** 作!\n");
}
else if(i==3){//输入3,对学历进行查询
p=headnext;
printf("请输入学历:");
scanf("%s",xdegree);
j=0;
for(p;p;p=p->next){
if(strcmp(p->degree,xdegree)==0){
++j;//如果存在这个人,那么j自加
printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num);
}
}
if(j==0)//表示没有找到输入的信息
printf("职工名单中没有这种学历的!\n");
else printf("查询成功!请继续 *** 作!\n");
}
else if(i==5){//输入5,对职务进行查询
p=headnext;
printf("请输入职务:");
scanf("%s",xjob);
j=0;
for(p;p;p=p->next){
if(strcmp(p->job,xjob)==0){
++j;//如果存在这个人,那么j自加
printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num);
}
}
if(j==0)//表示没有找到输入的信息
printf("职工名单中没有这种职务的!\n");
else printf("查询成功!请继续 *** 作!\n");
}
else if(i==6){//输入6,对住址进行查询
p=headnext;
printf("请输入住址:");
scanf("%s",xaddress);
j=0;
for(p;p;p=p->next){
if(strcmp(p->address,xaddress)==0){
++j;//如果存在这个人,那么j自加
printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num);
}
}
if(j==0)//表示没有找到输入的信息
printf("职工名单中没有住这的!\n");
else printf("查询成功!请继续 *** 作!\n");
}
else if(i==7){//输入7,对电话号码进行查询
p=headnext;
printf("请输入电话:");
scanf("%d",&xtele_num);
j=0;
for(p;p;p=p->next){
if(p->tele_num==xtele_num){
++j;//如果存在这个人,那么j自加
printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num);
}
}
if(j==0)//表示没有找到输入的信息
printf("职工名单中没人用这个号码!\n");
else printf("查询成功!请继续 *** 作!\n");
}
else if(1<0||i>7)//输入任意不是上述数字的,那么久显示输入错误
printf("输入出错!请再次输入!\n");
printf("\n");
printf("\t 职工信息查询 *** 作 \n");
printf("\t\n");
printf("\t1对姓名进行查询2对出生年月进行查询3对学历进行查询 \n");
printf("\t\n");
printf("\t4对工作年月进行查询5对职务进行查询 6对住址进行查询 \n");
printf("\t\n");
printf("\t7对电话进行查询 0回到主菜单 \n");
printf("\t\n");
}
}
void print(EPNode head)//---------------------职工信息的显示
{
for(EPNode p=head->next;p;p=p->next)//输出所有职工的信息
printf("%s %c %d %d %s %s %s %d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num);
}
void Listsort(EPNode head)//-----------------职工信息的排序
{
int t,n=0,m,flag=1;
EPNode p,q,s;
if(head->next==NULL){//职工链表为空
printf("名单中无职工信息,无法排序!\n\n");
return;
}
printf("\t 职工信息排序 *** 作 0回到主菜单 \n");
printf("\t\n");
printf("\t1对性别进行排序 2对出生年月进行排序 \n");
printf("\t\n");
printf("\t3对工作年月进行排序4显示全部职工信息 \n");
printf("\t\n");
while(1)
{
printf("请输入您要选择的 *** 作:");
scanf("%d",&t);
if(t==0)//输入0,退出排序系统,回到主菜单
break;
else if(t==1){//输入1,对性别进行排序
n=0,m,flag=1;
for(p=head;NULL!=p;p=p->next)//统计职工人数
n++;
for(m=1;flag&&m<=n;m++)
{
flag=0;
for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next)
{
if(p->sex>q->sex)//p为当前节点,p的性别>p的后继节点的性别
{
if(head==p)//p为头结点
{
head->next=q->next;
head=q;
q->next=p;//交换节点信息
q=head->next;
p=head;
}
else
{
p->next=q->next;
q->next=p;
s->next=q;
p=q;
q=p->next;
}
flag=1;
}
}
}
printf("排好序的信息如下:\n");
print(head);//输出所有节点的信息
return;
}
else if(t==2){//输入2,对出生年月进行排序
n=0,m,flag=1;
for(p=head;NULL!=p;p=p->next)//统计职工人数
n++;
for(m=1;flag&&m<=n;n++)//确定其不是小于2项,如果小于2项无需排序
{
flag=0;
for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next)
{
if(p->born_time>q->born_time)//对出生年月进行排序
{
if(head==p)
{
head->next=q->next;
head=q;
q->next=p;
q=head->next;
p=head;
}
else
{
p->next=q->next;
q->next=p;
s->next=q;
p=q;
q=p->next;
}
flag=1;
}
}
}
printf("排好序的信息如下:\n");
print(head);
return;
}
else if(t==3){//输入3,按工作时间进行排序
n=0,m,flag=1;
for(p=head;NULL!=p;p=p->next)
n++;
for(m=1;flag&&m<=n;n++)
{
flag=0;
for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){
if(p->work_time>q->work_time){
if(head==p){
head->next=q->next;
head=q;
q->next=p;
q=head->next;
p=head;
}
else{
p->next=q->next;
q->next=p;
s->next=q;
p=q;
q=p->next;
}
flag=1;
}
}
}
printf("排好序的信息如下:\n");
print(head);
return;
}
else if(t==4)
{
print(head);
}
else if(t!=0&&t!=1&&t!=2&&t!=3&&t!=4)
printf("输入出错,无法进行排序,请再次输入!\n\n");
printf("\n");
printf("\t 职工信息排序 *** 作 0回到主菜单 \n");
printf("\t\n");
printf("\t1对性别进行排序 2对出生年月进行排序 \n");
printf("\t\n");
printf("\t3对工作年月进行排序4显示全部职工信息 \n");
printf("\t\n");
}
}
void main()
{
DataType x;
EPNode head;
int i,n;
FILE fp;
ListInitiate(&head);//初始化链表
printf("\n");
printf("\t\n");
printf("\t欢迎进入职工管理系统!!!\n");
printf("\t\n");
printf("请在输入数据之间加以空格隔开,再输完一个数据组后,请用回车键进入下一组数据的输入\n");
printf("请输入要录入的职工人数:");//输入要录入的职工人数
scanf("%d",&n);
printf("请输入职工信息:\n姓名 性别 出生年月 工作年月 学历 职务 住址 电话\n");
for(i=0;i<n;i++)//职工信息的输入
{
scanf("%s %c %d %d %s %s %s %d",xname,&xsex,&xborn_time,&xwork_time,xdegree,xjob,xaddress,&xtele_num);
head=ListInsert(head,x);
}
if((fp=fopen("职工名单txt","w"))==NULL){
printf("\t无法打开'职工名单txt'!\n");
exit(0);
}
save(head,fp);
if(fclose(fp)){
printf("\t无法关闭'职工名单txt'!\n"); exit(0);
}
printf("\n");
printf("\t 主菜单 \n");
printf("\t\n");
printf("\t1新增职工信息 2删除职工信息 3查询职工信息\n");
printf("\t\n");
printf("\t4修改职工信息 5职工信息排序 0结束管理系统\n");
printf("\t\n");
while(1)
{
printf("请输入您要选择的 *** 作:");
scanf("%d",&i);
if(i==0)//输入0,结束系统
{
printf("\t\t您已经选择退出职工管理系统!!!\n");
break;
}
else if(i==1){//输入1,新增一名职工
printf("请输入职工信息:\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");
scanf("%s %c %d %d %s %s %s %d",xname,&xsex,&xborn_time,&xwork_time,xdegree,xjob,xaddress,&xtele_num);
head=ListInsert(head,x);
printf("新增成功!请继续 *** 作!\n");
save(head,fp);//保存在文件中
}
else if(i==2){//输入2,删除一名职工
ListDelete(head);
if((fp=fopen("职工名单txt","w"))==NULL){
printf("无法打开'职工名单txt'!\n");
exit(0);
}
save(head,fp);//保存在文件中
if(fclose(fp)){
printf("无法关闭'职工名单txt'!\n"); exit(0);
}
}
else if(i==3)//输入3,查找一名职工
Listfind(head);
else if(i==4){//输入4,修改职工信息
ListModify(head);
if((fp=fopen("职工名单txt","w"))==NULL){
printf("无法打开'职工名单txt'!\n");
exit(0);
}
save(head,fp);//保存在文件中
if(fclose(fp)){
printf("无法关闭'职工名单txt'!\n"); exit(0);
}
}
else if(i==5){//输入5,对职工信息进行排序
EPNode p=head;
Listsort(p);
}
//如果出入的不是上述任何一种情况就输出:输入出错
else printf("输入出错!请再次输入!\n");
printf("\n");
printf("\t 主菜单 \n");
printf("\t\n");
printf("\t1新增职工信息 2删除职工信息 3查询职工信息\n");
printf("\t\n");
printf("\t4修改职工信息 5职工信息排序 0结束管理系统\n");
printf("\t\n");
}
}
这是我以前自己写的一个,然后你自己修改下吧,功能都很全的。
什么是C语言?C语言的简介。
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。
语言特点:C是中级语言/C是结构式语言/C语言功能齐全/C语言适用范围大/简洁紧凑、灵活方便/运算符丰富/数据类型丰富/C是结构式语言/语法限制不太严格,程序设计自由度大/适用范围大,可移植性好。
高级语言和低级语言的区别是低级语言接近机器语言层面,高级语言接近人。高级,低级 指层面,不是指难度。
C/C++语言,Fortran语言, Pascal语言,java,VB 都是 高级语言。汇编语言,机器语言 是 低级语言。
C语言是目前最流行的高级语言,学会后根据学习和工作需要,再学其它语言会很方便。很容易举一反三,快速掌握。
1 写代码。这是最基础的一步,即实现C语言的源文件(c,必需),和可能的头文件(h,非必需)。
2 编译。将编写好的代码,通过编译工具,转换为目标文件。此步中,会对文件内部及包含的头文件进行语法语义的分析检查。如果出错,则必须返回到1步对代码进行修改,直到没有错误为止。
3 链接。将目标文件链接成可执行文件。此步会对文件直接的关联进行检查。如果出错需要返回到1修改代码。直到没有错误。
4 运行。这个是最后一步,也是C语言的最终目的。
在运行结果与期望不符时,需要检查原因,修改代码,重新执行1,2,3直到程序没有问题。
以上就是关于c语言程序全部的内容,包括:c语言程序、什么是C语言程序设计、C语言程序设计 与 高级语言程序设计得区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)