第一篇:职工信息管理系统 单链表实现 C语言源程序(范文)
#include
/* 单链表内容有无发生改变,是否需要存盘的标志变量 */ struct employee {
};
typedef struct Node {
void InitList(LinkList *head)
/*将单链表初始化为空。动态生成一个头结点,并将头结点的指针域置为空*/ {
}
ListNode *Locatenum(LinkList head,char find[])
//通过职工工号查找,返回定位指针。{ LinkList p;if((*head=(LinkList)malloc(sizeof(ListNode)))==NULL)
/*为头结点分配一 printf(“系统分配存储空间失败!n”);个存储空间*/ exit(-1);(*head)->next=NULL;
/*将头结点的指针域置为空*/ struct employee data;struct Node *next;char num[10];
/* 工号 */ char name[15];
/* 姓名 */ char sex[7];
/* 性别 */ int age;
/* 年龄 */ char education[15];
/* 学历 */ int salary;
/* 工资 */ char phone[20];
/* 电话号码 */ char address[30];
/* 住址 */ }ListNode,*LinkList;
} p=head->next;if(!p)
//如果职工信息记录为空,返回NULL。
{
} return NULL;if(strcmp(p->data.num,find)==0)return p;p=p->next;return NULL;while(p)ListNode *Locatename(LinkList head,char find[])
//通过职工姓名查找,返回定位指针。{
}
ListNode *Locatesalary(LinkList head,int salary)
//通过职工工资查找,返回定位指针。{
LinkList p;p=head->next;if(!p)
//如果职工信息记录为空,返回NULL。
return NULL;while(p){ LinkList p;p=head->next;if(!p)
//如果职工信息记录为空,返回NULL。
{
} return NULL;if(strcmp(p->data.name,find)==0)return p;p=p->next;return NULL;while(p)
}
} if(p->data.salary==salary)return p;p=p->next;return NULL;void Nofind(){ }
void Modify(LinkList L)
//修改功能。{
ListNode *p;
char find[20];
if(!L->next)
{
printf(“请你输入要修改的职工工号:”);
scanf(“%s”,find);
p=Locatenum(L,find);
if(p)
{
printf(“请你输入新的工号(原来是%s):”,p->data.num);
scanf(“%s”,p->data.num);
getchar();
printf(“n”);
printf(“请你输入新的姓名(原来是%s):”,p->data.name);
scanf(“%s”,p->data.name);
getchar();
printf(“n”);
printf(“n***提示***:没有资料可以修改!n”);
return;printf(“n***提示***:没有找到该职工!n”);
}
printf(“请你输入新的性别(原来是%s):”,p->data.sex);
scanf(“%s”,p->data.sex);
getchar();
printf(“n”);
printf(“请你输入新的年龄(原来是%d):”,p->data.age);
scanf(“%d”,&p->data.age);
printf(“n”);
printf(“请你输入新的学历(原来是%s):”,p->data.education);
scanf(“%s”,p->data.education);
getchar();
printf(“n”);
printf(“请你输入新的工资(原来是%d):”,p->data.salary);
scanf(“%d”,&p->data.salary);
printf(“n”);
printf(“请你输入新的电话(原来是%s):”,p->data.phone);
scanf(“%s”,p->data.phone);
getchar();
printf(“n”);
printf(“请你输入新的住址(原来是%s):”,p->data.address);
scanf(“%s”,p->data.address);
getchar();
printf(“n”);
printf(“n***提示***:资料修改成功!n”);
saveflag=1;
}
else
Nofind();//if(p)结束
} //void Modify(LinkList L)
//修改功能结束 void Add(LinkList head)
/* 录入职工信息 */ {
system(“cls”);ListNode *p,*r,*s;
/* 实现添加操作的临时的结构体指针变量 */ int sign;
/* 标记重复工号的变量 */ char num[10];r=head;s=head->next;
/* 链表没有节点时,s=NULL;链表有节点时,指向while(r->next!=NULL)/* 如果存在后继结点时,r指针后移一个 */ r=r->next;
/* 将指针移至于链表最末尾,准备添加记录 */ printf(“输入‘#’将退出职工信息录入,退回至主菜单!nn”);while(1){
printf(“(PS:职工号为‘#’即退出录入功能)nn”);printf(“请输入职工号:”);fflush(stdin);
//清除缓冲区。gets(num);if(strcmp(num,“#”)==0)/* 输入‘0’,跳出while(1),即跳出Add()函数 */ break;s=head->next;
/* 每次从第一个节点开始找,看num是否重
while(s){
if(strcmp(s->data.num,num)==0){
} s=s->next;printf(“***提示***n工号为:‘%s’的职工信息已经存在!printf(”若要修改请按‘4’,放弃请按‘0’!n“);scanf(”%d“,&sign);if(sign==4)
Modify(head);return;else 第一个职工节点 */ 复。*/ n”,num);}//while(s)if((p=(LinkList)malloc(sizeof(ListNode)))==NULL)//生成没赋值的新节点 p。
{
} strcpy(p->data.num,num);printf(“n”);printf(“请输入该职工姓名:”);scanf(“%s”,p->data.name);getchar();printf(“n”);printf(“请输入该职工的性别:(注:男性:male;女性:female)”);scanf(“%s”,p->data.sex);getchar();printf(“n”);printf(“请输入该职工的年龄:”);scanf(“%d”,&p->data.age);printf(“n”);printf(“请输入该职工的学历:”);scanf(“%s”,p->data.education);getchar();printf(“n”);printf(“请输入该职工的工资:”);scanf(“%d”,&p->data.salary);printf(“n”);printf(“请输入该职工的电话号码:”);scanf(“%s”,p->data.phone);getchar();printf(“n”);printf(“请输入该职工的住址:”);gets(p->data.address);printf(“n”);p->next=NULL;
/* 表明这是链表的尾部结点 */ r->next=p;
/* 将新建的结点加入链表尾部中 */ r=p;saveflag=1;printf(“n”);printf(“系统分配存储空间失败!n”);printf(“退出程序!n”);exit(-1);}//while(1)}//void Add函数结束。
void printline()
//打印横线。{ }
void printsubject()
//打印各分类标题。{ }
void printLinkList(LinkList p)
//打印p结点各个数据成员的值。{ printf(“ %s
%s %s
%d %s %d
%s
%sn”,p->data.num,p->data.name,p->data.sex,p->data.age,p->data.education,p->data.salary,p->data.phone,p->data.address);}
void Allemployeeinfo(LinkList head)//显示所有职工信息。{
int count=0;ListNode *p;p=head->next;if(!p){
} printf(“tttt显示结果n”);printline();printsubject();printf(“n”);while(p)printf(“***提示***:目前没有存储任何职工记录!n”);printf(“返回主菜单,请重新选择功能!n”);return;printf(“ 工 号t 姓 名
性 别
年 龄
学 历
工 资
电 话tt 住 址n”);printf(“------------------n”);
} {
} printline();printf(“n”);printf(“已经存储了%d条职工信息!n”,count);printLinkList(p);p=p->next;count++;void Wrong(){ }
void menu()
//主菜单。{
printf(“n”);printf(“t**********************************************************printf(”t*
printf(“t*
printf(”t*
< 职工信息管理系统_单链表实现 >
printf(“t*
printf(”t*
[1]
录入职工信息
[2]
删除职工信息
printf(“t*
[3]
查询职工信息
[4]
修改职工信息
printf(”t*
[5]
插入职工记录
[6]
统计职工信息
printf(“t*
[7]
排序
[8]
保存职工信息
printf(”t*
[9]
显示所有职工记录
[0]
退出系统
printf(“n***提示***:输入错误!n”);*********n“);*n”);*n“);*n”);*n“);*n”);*n“);*n”);*n“);*n”);
printf(“t*
printf(”t*
printf(“t*
版权所有人:printf(”t*
电子132班
printf(“t*
printf(”t***********************************************************n“);*n”);彭林
*n“);*n”);1319200063
*n“);*********n”);} //void menu菜单结束。
void Del(LinkList L)//删除职工信息。{
int select;
//删除方式选择记录变量。ListNode *p,*r;char find[20];if(!L->next)
//当list无后继结点时,提示和结束Del()函数。{
}
printf(“n按工号删除,请按‘1’n按姓名删除,请按‘2’n”);printf(“n=====>功能选择:”);scanf(“%d”,&select);if(select==1){
printf(“请输入要删除的职工工号:”);scanf(“%s”,find);getchar();p=Locatenum(L,find);if(p){ r=L;printf(“n***提示***:没有记录可以删除!n”);return;
} while(r->next!=p)r=r->next;//从第一个结点找起,直到发现r->next=p, 是待删除结点,跳出循环。
r->next=p->next;free(p);printf(“n***提示***:该职工信息已成功删除!n”);saveflag=1;else Nofind();}//if(select==1).else if(select==2){
printf(“请输入要删除的职工姓名:”);scanf(“%s”,find);getchar();p=Locatename(L,find);if(p){
} else Nofind();r=L;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf(“n***提示***:该职工信息已成功删除!n”);saveflag=1;}//if(select==2).else Wrong();
//显示输入错误的话
}//void Del()删除函数结束。
void Search(LinkList L)
//查询职工信息。{ int select;
int salary;int sign=0;char find[20];ListNode *p;
//实现查询操作的临时结构体指针变量。if(!L->next){
} printf(“n按工号查找,请按‘1’n按工资查找,请按‘2’n按姓名查找,printf(”n=====>功能选择:“);scanf(”%d“,&select);printf(”n“);if(select==1)
//工号。{
} else if(select==2)
//工资。{
printf(”请输入要查找的工资:“);scanf(”%d“,&salary);p=Locatesalary(L,salary);printf(”请输入要查找的工号:“);scanf(”%s“,find);getchar();p=Locatenum(L,find);if(p){
} else Nofind();printf(”tttt
查找结果n“);printline();
//打印横线。printsubject();
//打印各分类标题。
printLinkList(p);
//打印p结点各个数据成员的值。printline();
//打印横线。printf(”n***提示***:没有职工信息资料可以查询!n“);printf(”返回主菜单,请重新选择功能!n“);return;请按‘3’n”);
} if(p){
} while(p){
{
} } if(sign==0)Nofind();printf(“tttt查找结果n”);printline();printsubject();printLinkList(p);printline();sign++;p=Locatesalary(p,salary);if(p)printf(“tttt查找结果n”);printline();printsubject();printLinkList(p);printline();sign++;else if(select==3)
//姓名。{
printf(“请输入要查找的姓名:”);scanf(“%s”,find);getchar();p=Locatename(L,find);if(p){
printf(“tttt查找结果n”);printline();printsubject();printLinkList(p);
} } printline();else Nofind();else Wrong();}//void Search()查询函数结束。
void Save(LinkList L)
//信息保存到文件中。{
FILE *fp;ListNode *p;int count=0;int flag=1;fp=fopen(“Employeeinfo.txt”,“wb”);if(fp==NULL){
} p=L->next;while(p){
if(fwrite(p,sizeof(ListNode),1,fp)==1)
//将第一个记录结点值写入文
{
p=p->next;
//依次写入下一个结点的 count++;
//文件的记录数+1。printf(“n***提示***:打开文件时发生错误!n”);return;件。
值。
}
else
{
flag=0;
printf(“写入文件过程发生错误!n”);
break;
}
}//while(p).if(count>0){
} else {
} fclose(fp);system(“cls”);//清屏。
printf(“文件保存失败!‘0’条记录被保存。n”);printf(“n***提示***:文件保存成功。(有%d条记录已经保存。)n”,count);saveflag=0;
}//void Save()函数结束。
void Sort(LinkList L)
//排序功能函数。{
ListNode *p,*m,*n;int i,j,count=0;p=L->next;if(!p){
} system(“cls”);
//清屏。printf(“按工资从低到高排序:n”);printf(“***以下为排序前的所有职工记录***n”);Allemployeeinfo(L);while(p){
} for(i=0;i //不包含头结点的职工信息结点的总个数。p=p->next;system(“cls”); //清屏。printf(“无任何职工信息!n”);printf(“返回主菜单!n”);return; } { } printf(“***以下为排序后的所有职工记录***n”);Allemployeeinfo(L);saveflag=1;printf(“排序成功!n”);n=L;p=L->next;m=p->next;while(m){ } if(p->data.salary>m->data.salary){ } else { } n=p;p=m;m=m->next;n->next=p->next;p->next=m->next;m->next=p;n=m;m=p->next;void Statistics(LinkList L)//统计职工中的最高工资和最低工资。{ ListNode *Max,*Min;int i;ListNode *t=L->next;if(!t){ system(“cls”); //清屏。printf(“没有储存任何职工记录!n”); } } printf(“返回主菜单,请先录入职工信息!n”);return;system(“cls”);Max=Min=t;t=t->next;while(t){ } printf(“最高工资为:%dn”,Max->data.salary);printf(“最低工资为:%dn”,Min->data.salary);printf(“若要查看最低,最高工资的相关职工信息,n”);printf(“请按‘1’,然后按照提示进行相关操作,n”);printf(“否则,请按‘1’除外的任何数字键以退出统计功能,返回主菜单。n”);printf(“n=====>功能选择:”);scanf(“%d”,&i);if(i==1)Search(L); //显示符合要求的职工信息。return;else if(Max->data.salary //Max指针指向最高工资的职工结点。Min=t; //Min指针指向最低工资的职工结点。if(Min->data.salary>t->data.salary)t=t->next;void Insert(LinkList L) //插入新的职工信息。{ printf(“本功能可以通过姓名和工号查找到符合要求的n”);//功能介绍。printf(“相关职工信息,然后将您希望添加进去的新的n”);printf(“职工信息插入到该职工信息记录的后面。n”);ListNode *p,*s;char find[20]; //存放工号和姓名的变量。int i;printf(“通过姓名查找,请按‘1’。n”);printf(“通过工号查找,请按‘2’。n”); printf(“返回主菜单,请按‘3’。n”);printf(“n=====>功能选择:”);scanf(“%d”,&i);printf(“n”);if(i==3){ } else if(i==1){ printf(“请输入已在存储记录中的职工姓名:”);scanf(“%s”,find);getchar();p=Locatename(L,find);//定位。if(!p){ } s=(LinkList)malloc(sizeof(ListNode));if(!s){ } printf(“请输入新职工工号:”);gets(s->data.num);printf(“n”);printf(“请输入新职工姓名:”);scanf(“%s”,s->data.name);getchar();printf(“n”);printf(“请输入新职工的性别:(注:男性:male;女性:female)”);scanf(“%s”,s->data.sex);printf(“系统分配存储空间失败!n”);system(“cls”);return;printf(“您输入的该职工姓名不在信息记录中,请重新核审!n”);printf(“返回主菜单。n”);return;system(“cls”); //退出插入功能,返回主菜单。return; } getchar();printf(“n”);printf(“请输入新职工的年龄:”);scanf(“%d”,&s->data.age);printf(“n”);printf(“请输入新职工的学历:”);scanf(“%s”,s->data.education);getchar();printf(“n”);printf(“请输入新职工的工资:”);scanf(“%d”,&s->data.salary);printf(“n”);printf(“请输入新职工的电话号码:”);scanf(“%s”,s->data.phone);getchar();printf(“n”);printf(“请输入新职工的住址:”);scanf(“%s”,s->data.address);getchar();printf(“n”);s->next=p->next;p->next=s;printf(“姓名为:%s的新职工信息已成功插到姓名为:%s的职工信息记saveflag=1; //资料已改动的存储变量。录后面。n”,s->data.name,p->data.name);else if(i==2){ printf(“请输入已在存储记录中的职工工号:”);scanf(“%s”,find);getchar();p=Locatenum(L,find);//定位。if(!p){ printf(“您输入的该职工工号不在信息记录中,请重新核审!n”);printf(“返回主菜单。n”);return; } s=(LinkList)malloc(sizeof(ListNode));if(!s){ } printf(“请输入新职工工号:”);gets(s->data.num);printf(“n”);printf(“请输入新职工姓名:”);scanf(“%s”,s->data.name);getchar();printf(“n”);printf(“请输入新职工的性别:(注:男性:male;女性:female)”);scanf(“%s”,s->data.sex);getchar();printf(“n”);printf(“请输入新职工的年龄:”);scanf(“%d”,&s->data.age);printf(“n”);printf(“请输入新职工的学历:”);scanf(“%s”,s->data.education);getchar();printf(“n”);printf(“请输入新职工的工资:”);scanf(“%d”,&s->data.salary);printf(“n”);printf(“请输入新职工的电话号码:”);scanf(“%s”,s->data.phone);getchar();printf(“n”);printf(“请输入新职工的住址:”);scanf(“%s”,s->data.address);getchar();printf(“n”);printf(“系统分配存储空间失败!n”);system(“cls”);return; } } s->next=p->next;p->next=s;printf(“姓名为:%s的新职工信息已成功插到姓名为:%s的职工信息记saveflag=1;录后面。n”,s->data.name,p->data.name);else { } printf(“功能选择有误!返回主菜单。n”);return;void main(){ LinkList L;/*定义链表*/ // struct Node *list; FILE *fp;/* 文件指针 */ int choose;/*保存选择结果变量*/ char ch; /*保存(y,Y,n,N)*/ int count=0;/*保存文件中的记录条数(或结点个数)*/ struct Node *p,*r; /*定义记录指针变量*/ printf(“tttt职工信息管理系统nttttn”); L=(struct Node*)malloc(sizeof(struct Node)); if(!L) { printf(“n系统分配存储空间失败!n”);/*如没有申请到,打印提示信 return; /*返回菜单*/ 息*/ } L->next=NULL; r=L; fp=fopen(“Employeeinfo.txt”,“rb”); if(fp==NULL) { printf(“n***提示***:存储职工信息的文件还不存在,是否创建? scanf(”%c“,&ch);(y/n)n”); */ if(ch=='y'||ch=='Y') { fp=fopen(“Employeeinfo.txt”,“ab+”); printf(“文件创建成功!n”); } else { printf(“文件没有创建,无法写入职工信息!nn”); printf(“<-----退 出 职 工 信 息 管 理 系 统----->n”); exit(0); } } // if(fp==NULL) printf(“n=====>提示:文件已经打开,正在导入记录......n”); while(!feof(fp))//没有到文件尾时,循环 { fclose(fp);/* 关闭文件 */ printf(“n=====>提示:记录导入完毕,共导入%d条记录。n”,count); while(1) p=(struct Node*)malloc(sizeof(struct Node)); if(!p) { if(fread(p,sizeof(struct Node),1,fp))/* 读文件的已有内容放入结点中 { p->next=NULL; r->next=p; r=p;/* 将该结点挂入链表中, r指向最后的节点 */ count++; printf(“ memory malloc failure!n”); /*没有申请成功*/ exit(0); /*退出*/ } } } //while(!feof(fp)) { menu(); printf(“tt====>请选择:”); scanf(“%d”,&choose); if(choose==0) { if(saveflag==1) { getchar(); printf(“n=====>提示:资料已经改动,是否将改动保存到文件 scanf(”%c“,&ch); if(ch=='y'||ch=='Y') Save(L);中(y/n)?n”); } //if printf(“n***提示***:您已经退出系统,欢迎再次使用!~n”); break; }//if switch(choose){ case 1:Add(L); break;break;break;break;break;break;Sort(L);break;Save(L);case 2:Del(L);case 3:Search(L);case 4:Modify(L);case 5:Insert(L);case 6:Statistics(L);case 7: case 8: break;system(“cls”);Allemployeeinfo(L);break;case 9: default: } } } Wrong();break; //C语言课程设计 职工信息管理系统—单链表实现 #include “stdio.h” #include “stdlib.h” #include “string.h” int saveflag=0;/*是否需要存盘的标志变量*/ struct employee { char name[15];char num[10];/* 工号 */ char sex[4];char bm[15];char zc[20];int gz; }; typedef struct node { struct employee data;struct node *next;}Node,*Link; //Link l(注意是:字母l不是数字1)void add(Link l);void disp(Link l);//查看职工所有信息 void del(Link l);//删除功能 Node* Locate(Link l,char findmess[],char nameornum[]); void Qur(Link l);//查询功能 void Tongji(Link l);//统计 void Sort(Link l);//排序 void Modify(Link l);//修改功能 void save(Link l);//将单链表l中的数据写入文件 void printe(Node *p);//本函数用于打印链表中某个节点的数据内容 */ //以下4个函数用于输出中文标题 void printstart();void Wrong();void Nofind();void printc(); void menu(){ printf(“t*****************************************************************n”);printf(“t* *n”);printf(“t* 职工信息管理系统_结构体数组实现 *n”);printf(“t* *n”);printf(“t* [1] 增加职工信息 [2] 删除职工信息 *n”);printf(“t* [3] 查询职工信息 [4] 修改职工信息 *n”);printf(“t* [5] 插入职工记录 [6] 统计职工记录 *n”);printf(“t* [7] 排序 [8] 保存职工信息 *n”);printf(“t* [9] 显示数据 [0] 退出系统 *n”);printf(“t* *n”);printf(“t*****************************************************************n”);} //void menu菜单结束 void Disp(Link l)//显示单链表l中存储的职工记录,内容为employee结构中定义的内容 { int count=0;Node *p;p=l->next;// l存储的是单链表中头结点的指针,该头结点没有存储职工信息,指针域指向的后继结点才有职工信息 if(!p)/*p==NULL,NUll在stdlib中定义为0*/ { printf(“n=====>提示:没有职工记录可以显示!n”); return;} printf(“tttt显示结果n”);printstart();//打印横线 printc();//打印各学科标题 printf(“n”); while(p)//逐条输出链表中存储的职工信息 { printe(p); p=p->next;} printstart();printf(“n”);} //void Disp结束 void printstart(){ printf(“---------n”);} void Wrong(){ printf(“n=====>提示:输入错误!n”);} void Nofind(){ printf(“n=====>提示:没有找到该职工!n”);} void printc()/* 本函数用于输出中文 */ { printf(“ 工号t 姓名 性别 部门 职称 工资 总工资平均工资n”);} void printe(Node *p)/* 本函数用于打印链表中某个节点的数据内容 */ { printf(“%-12s%st%st%dt%dt%dt %dt %dn”,p->data.num,p->data.name,p->data.sex,p->data.bm,p->data.zc,p->data.gz);} //Locate(l,findmess,“num”);/* 该函数用于定位连表中符合要求的结点,并返回该指针 */ Node* Locate(Link l,char findmess[],char zcornum[]){ Node *r;if(strcmp(zcornum,“num”)==0)/* 按工号查询 */ { r=l->next; while(r!=NULL) { if(strcmp(r->data.num,findmess)==0)/*若找到findmess值的工号*/ return r; r=r->next; } } else if(strcmp(zcornum,“zc”)==0)/* 按职称查询 */ { r=l->next; while(r!=NULL) { if(strcmp(r->data.zc,findmess)==0)/*若找到findmess值的职工职称*/ return r; r=r->next; } } return 0;/*若未找到,返回一个空指针*/ } //add()函数中,无节点时,r指向list头,有节点时,r指向末尾节点 void Add(Link l)/* 增加职工 */ { Node *p,*r,*s;/*实现添加操作的临时的结构体指针变量*/ char num[10];int flag=0;r=l;s=l->next;//链表没有节点时,s=null;/链表有节点时,指向第一个职工节点 while(r->next!=NULL)//如果存在后继结点时,r指针后移一个 r=r->next;/*将指针移至于链表最末尾,准备添加记录*/ while(1){ printf(“请你输入工号(以'0'返回上一级菜单:)”); scanf(“%s”,num); if(strcmp(num,“0”)==0)//输入'0',跳出while(1),即跳出add()函数 break; s=l->next;//作用? 每次从第一个节点开始找,看num是否重复。 while(s)//工号重复时,返回主菜单 { if(strcmp(s->data.num,num)==0) { printf(“=====>提示:工号为'%s'的职工已经存在,若要修改请你选择'4 修改'!n”,num); flag=1;//break; return; } s=s->next; } //while(s) p=(Node *)malloc(sizeof(Node));//生成没赋值的新节点 p strcpy(p->data.num,num); printf(“请你输入姓名:”); scanf(“%s”,p->data.name); getchar(); printf(“请你输入性别:”); scanf(“%s”,p->data.sex); getchar(); printf(“请你输入职工所在部门:”); scanf(“%d”,&p->data.bm); getchar(); printf(“请你输入职工职称:”); scanf(“%d”,&p->data.zc); getchar(); printf(“请你输入职工工资:”); scanf(“%d”,&p->data.gz); getchar(); /* 信息输入已经完成 */ p->next=NULL;/*表明这是链表的尾部结点*/ r->next=p;/*将新建的结点加入链表尾部中*/ r=p; saveflag=1;} //while(1)} //void Add增加结束 void Del(Link l)/* 删除 */ { int sel;Node *p,*r;/*实现删除操作的临时的结构体指针变量*/ char findmess[20]; if(!l->next)//当list无后继结点时,提示和结束返回del(){ printf(“n=====>提示:没有记录可以删除!n”); return;} printf(“n=====>1按工号删除n=====>2按姓名删除n”);scanf(“%d”,&sel);if(sel==1)//按工号删除 { printf(“请你输入要删除的工号:”); scanf(“%s”,findmess); p=Locate(l,findmess,“num”); if(p) { r=l; while(r->next!=p) r=r->next;//从第一个结点找起,直到发现r->next=p, 删除结点,跳出循环 r->next=p->next;//r r->next(p)p->next free(p); printf(“n=====>提示:该职工已经成功删除!n”); saveflag=1; } else Nofind();//显示一句话 } //if(sel==1)else if(sel==2)//按姓名删除 { 是待 printf(“请你输入要删除的姓名:”); scanf(“%s”,findmess); p=Locate(l,findmess,“name”); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next;//r r->next(p)p->next free(p); printf(“n=====>提示:该职工已经成功删除!n”); saveflag=1; } else Nofind();} //if(sel==2)else Wrong();//显示输入错误的话 } //void Del删除结束 void Qur(Link l)//查询功能 { int sel;char findmess[20];Node *p;//实现查询操作的临时的结构体指针变量 if(!l->next){ printf(“n=====>提示:没有资料可以查询!n”); return;} printf(“n=====>1按工号查找n=====>2按职称查找n”);scanf(“%d”,&sel); if(sel==1)/* 工号 */ { printf(“请你输入要查找的工号:”); scanf(“%s”,findmess); p=Locate(l,findmess,“num”); if(p) { printf(“tttt查找结果n”); printstart();//打印横线 printc();//打印各学科标题 printe(p);//打印p结点各个数据成员的值 printstart();//打印横线 } else Nofind();} //if(sel==1) else if(sel==2)/* 职称 */ { printf(“请你输入要查找的职称:”); scanf(“%s”,findmess); p=Locate(l,findmess,“zc”); if(p) { printf(“tttt查找结果n”); printstart(); printc(); printe(p); printstart(); } else Nofind();} else Wrong();} //void Qur查询结束 void Modify(Link l)//修改功能 { Node *p;char findmess[20];if(!l->next){ printf(“n=====>提示:没有资料可以修改!n”); return;} printf(“请你输入要修改的职工工号:”);scanf(“%s”,findmess);p=Locate(l,findmess,“num”); if(p){ printf(“请你输入新工号(原来是%s):”,p->data.num); scanf(“%s”,p->data.num); printf(“请你输入新姓名(原来是%s):”,p->data.name); scanf(“%s”,p->data.name); getchar(); printf(“请你输入新性别(原来是%s):”,p->data.sex); scanf(“%s”,p->data.sex); getchar(); printf(“请你输入新的部门(原来是%s):”,p->data.bm); scanf(“%d”,&p->data.bm); printf(“请你输入新的职称(原来是%s):”,p->data.zc); scanf(“%d”,&p->data.zc); getchar(); printf(“请你输入新的工资(原来是%d):”,p->data.gz); scanf(“%d”,&p->data.gz); printf(“n=====>提示:资料修改成功!n”); //shoudsave=1;} else Nofind();//if(p)结束 } //void Modify(Link l)//修改功能结束 //插入记录:按工号查询到要插入的节点的位置,然后在该工号之后插入一个新节点。 void Insert(Link l){ Node *s,*r,*p;/*p指向插入位置,p指新插入记录节点*/ char ch,new_num[10],old_num[10];//old_num[]保存插入点位置之前的工号,new_num[]保存输入的新记录的工号 int flag=0;s=l->next;system(“cls”);Disp(l); while(1){ //stringinput(s,10,“please input insert location after the Number:”); printf(“请你输入已存在的工号(以'0'返回上一级菜单:)”); scanf(“%s”,old_num); if(strcmp(old_num,“0”)==0)//输入'0',跳出while(1),即跳出Insert()函数 return; s=l->next;//作用? 每次从第一个节点开始找 flag=0; while(s)/*查询该工号是否存在,flag=1表示该工号存在*/ { if(strcmp(s->data.num,old_num)==0) { flag=1; break; } s=s->next; } if(flag==1) break;/*若工号存在,则进行插入之前的新记录的输入操作*/ else { getchar(); printf(“n=====>The number %s is not existing,try again?(y/n):”,old_num); scanf(“%c”,&ch); if(ch=='y'||ch=='Y') {continue;} else {return;} //回主菜单 } }//while(1)/*以下新记录的插入新节点,工号不能跟已存在的工号相同,操作与Add()相同*/ printf(“请你输入待插入的工号(以'0'返回上一级菜单:)”);scanf(“%s”,new_num);if(strcmp(new_num,“0”)==0)//输入'0',跳出while(1),即跳出add()函数 return;s=l->next;//作用? 每次从第一个节点开始找,看num是否重复。 while(s)//工号重复时,返回主菜单 { if(strcmp(s->data.num,new_num)==0) { printf(“=====>提示:工号为'%s'的职工已经存在'!n”,new_num); flag=1; return; } s=s->next;} //while(s) p=(Node *)malloc(sizeof(Node));if(!p){ printf(“n allocate memory failure ”);/*如没有申请到,打印提示信息*/ return;/*返回主界面*/ } strcpy(p->data.num,new_num);printf(“请你输入姓名:”);scanf(“%s”,p->data.name);getchar();printf(“请你输入性别:”);scanf(“%s”,p->data.sex);getchar();printf(“请你输入部门:”);scanf(“%d”,&p->data.bm);getchar();printf(“请你输入职称:”);scanf(“%d”,&p->data.zc);getchar();printf(“请你输入工资:”);scanf(“%d”,&p->data.gz);getchar();// 信息输入已经完成 p->next=NULL;/*表明这是链表的尾部结点*/ saveflag=1;/*在main()有对该全局变量的判断,若为1,则进行存盘操作*/ /*将指针赋值给r,因为l中的头节点的下一个节点才实际保存着学生的记录*/ r=l->next;while(1){ if(strcmp(r->data.num,old_num)==0)/*在链表中插入一个节点*/ { p->next=r->next; r->next=p; break; } r=r->next;}// while(1),r作为查询指针,依次从第一个节点找起,找到后 跳出 while(1)循环 Disp(l);printf(“nn”);// getchar(); } void Tongji(Link l)//统计 { Node *max,*min;/*用于指向工资最高的节点*/ Node *t=l->next;if(!t){ system(“cls”); printf(“n=====>Not employee record!n”); getchar(); return;} system(“cls”);Disp(l);max=min=t;while(t){ if(t->data.gz>=max->data.gz)max=t; if(t->data.gz<=min->data.gz)min=t; t=t->next; printf(“最高工资为:%dn”,max); printf(“t%st%st%st%st%st%dnn”,t->data.num,t->data.name,t->data.sex,t->data.bm,t->data.zc,t->data.gz);printf(“最低工资为:%dn”,min); printf(“t%st%st%st%st%st%dnn”,t->data.num,t->data.name,t->data.sex,t->data.bm,t->data.zc,t->data.gz);} } void Sort(Link l)//排序 { Link ll;Node *p,*rr,*s;int i=0;if(l->next==NULL){ system(“cls”);printf(“n=====>Not employee record!n”);getchar();return;} ll=(Node*)malloc(sizeof(Node));/*用于创建新的节点*/ if(!ll){ printf(“n allocate memory failure ”);/*如没有申请到,打印提示信息*/ return;/*返回主界面*/ } ll->next=NULL;system(“cls”);Disp(l);/*显示排序前的所有职工记录*/ p=l->next;while(p)/*p!=NULL*/ { s=(Node*)malloc(sizeof(Node));/*新建节点用于保存从原链表中取出的节点信息*/ if(!s)/*s==NULL*/ { printf(“n allocate memory failure ”);/*如没有申请到,打印提示信息*/ return;/*返回主界面*/ } s->data=p->data;/*填数据域*/ s->next=NULL;/*指针域为空*/ rr=ll; /*rr链表于存储插入单个节点后保持排序的链表,ll是这个链表的头指针,每次从头开始查找插入位置*/ while(rr->next!=NULL && rr->next->data.gz>=p->data.gz) {rr=rr->next;} /*指针移至总分比p所指的节点的总分小的节点位置*/ if(rr->next==NULL)/*若新链表ll中的所有节点的总分值都比p->data.gz大时,就将p所指节点加入链表尾部*/ rr->next=s; else /*否则将该节点插入至第一个总分字段比它小的节点的前面*/ { s->next=rr->next; rr->next=s; } p=p->next;/*原链表中的指针下移一个节点*/ } l->next=ll->next;/*ll中存储是的已排序的链表的头指针*/ Disp(l);saveflag=1;printf(“n =====>sort complete!n”);} void Save(Link l){ FILE* fp;Node *p;//实现保存操作的临时的结构体指针变量 int flag=1,count=0; fp=fopen(“employee.txt”,“wb”);if(fp==NULL){ printf(“n=====>提示:重新打开文件时发生错误!n”); return;} p=l->next;//p指向第一个记录结点 while(p){ if(fwrite(p,sizeof(Node),1,fp)==1)//将第一个记录结点值写入文件 { p=p->next;//依次写入第二个结点的值,count++;//文件的记录数+1 } else { flag=0; break; } } //while(p) if(count>0){ printf(“n=====>提示:文件保存成功.(有%d条记录已经保存.)n”,count); saveflag=0;} else { system(“cls”); printf(“保存文件失败,'0'条记录被保存!n”);} fclose(fp);} // void Save结束 void main(){ Link list;/*定义链表*/ // struct node *list;FILE *fp;/* 文件指针 */ int choose;/*保存选择结果变量*/ char ch;/*保存(y,Y,n,N)*/ int count=0;/*保存文件中的记录条数(或结点个数)*/ struct node *p,*r;/*定义记录指针变量*/ printf(“tttt职工信息管理系统nttttn”); list=(struct node*)malloc(sizeof(struct node)); if(!list){ printf(“n allocate memory failure ”);/*如没有申请到,打印提示信息*/ return;/*返回主界面*/ } list->next=NULL;r=list; fp=fopen(“employee.txt”,“rb”);if(fp==NULL){ printf(“n=====>提示:文件还不存在,是否创建?(y/n)n”); scanf(“%c”,&ch); if(ch=='y'||ch=='Y') fp=fopen(“employee.txt”,“ab+”); else exit(0);} // if(fp==NULL) printf(“n=====>提示:文件已经打开,正在导入记录......n”); while(!feof(fp))//没有到文件尾时,循环 { p=(struct node*)malloc(sizeof(struct node)); if(!p) { printf(“ memory malloc failure!n”);/*没有申请成功*/ exit(0);/*退出*/ } if(fread(p,sizeof(struct node),1,fp))/* 读文件的已有内容放入结点中 */ { p->next=NULL; r->next=p; r=p;/* 将该结点挂入链表中, r指向最后的节点 */ count++; } } //while(!feof(fp)) fclose(fp);/* 关闭文件 */ printf(“n=====>提示:记录导入完毕,共导入%d条记录.n”,count); while(1){ menu(); printf(“tt====>请选择:”); scanf(“%d”,&choose); if(choose==0) { if(saveflag==1) { getchar(); printf(“n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?n”); scanf(“%c”,&ch); if(ch=='y'||ch=='Y') Save(list); } //if printf(“n=====>提示:你已经退出系统,再见!n”); break; }//if switch(choose) { case 1:Add(list); break;/* 增加职工记录 */ case 2: Del(list); break;/* 删除职工记录 */ case 3: Qur(list); break;/* 查询职工记录 */ case 4: Modify(list); break;/* 修改职工记录 */ case 5: Insert(list); break;/*插入职工记录*/ case 6: Tongji(list); break;/*统计职工记录*/ case 7: Sort(list); break;/*排序职工记录*/ case 8: Save(list); break;/* 保存职工记录 */ case 9: system(“cls”); Disp(list); break;/*显示职工记录*/ default: Wrong(); getchar(); break; } //switch(choose)}//while(1)} //main()/* */ 基于单片机msp430和温度传感器ds18b20的水温度控制系统的c语言源程序(不是测量,要有加热跟制冷) 我这是用STC做的,应该很容易移植到MPS430上的给你参考一下。#include sbit scl=P1^3;sbit sda=P1^4; sbit key1=P1^6;sbit key2=P1^7;sbit key3=P2^0;sbit key4=P2^1; sbit lcrs=P3^7;//数据/命令 sbit lcwr=P3^5;//读/写 sbit lcden=P3^4;//使能 sbit DS=P2^2; /*sbit lcrs=P3^4;//数据/命令 sbit lcwr=P3^7;//读/写 sbit lcden=P3^5;//使能 */ sbit jrk=P2^2;sbit cyk=P2^3;sbit xhk=P2^4;bit flag=0,rsg=0,not=0,he=0,in=0;int acon=0,bcon=0,dcon=0,econ=0, temp=0,y=0,j=0,l=0,cfj=0,ec=0,dc=0,at;uchar code table[]={48,49,50,51,52,53,54,55,56,57};uchar code ta1[]={“Temperature UP”};uchar code ta2[]={“Temperature DN”};uchar code ta3[]={“Inflator Cycle”};uchar code ta4[]={“Inflator Time ”};uchar code ta5[]={“ Heating UP ”};uchar code ta6[]={“ Inflator ”};uchar code table7[]={“Temperature”};uchar table1[]={0,0,0,'.',0};uchar table3[]={“AptitudeAquarium”};uchar table4[]={0,0,0,0,0};uchar n,c=0;void delay(uchar);void wen_kong();void xh();void rso();void weno(); void Init_Com(void){ TMOD = 0x11;PCON = 0x00;TH1=0x61;TL1=0x99;EA=1;ET1=1;TR1=1;} void delay(uchar count)//delay { uint i;while(count){ i=200;while(i>0)i--;count--;} } ////初始化18B20///////// bit init18b20(void){ uint i;bit no;DS=0;i=103;while(i>0)i--;DS=1;i=4;while(i>0)i--;no=DS;if(no==0){ DS=1;i=100;while(i>0)i--;no=DS;if(no==1)not=0;else not=1;} else not=1;return(not);} bit tmpread()bit(void)//读一位 { uint i;bit dat;DS=0;i++;DS=1;i++;i++;dat=DS;i=8;while(i>0)i--;return(dat);} uchar tmpread()(void)//读一个字节 { uchar i,j,dat;dat=0;for(i=1;i<=8;i++){ j=tmpread()bit();dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT里 } return(dat);} void tmpwritebyte(uchar dat)//写一个字节到 ds18b20 { uint i;uchar j;bit testb;for(j=1;j<=8;j++){ testb=dat&0x01;dat=dat>>1;if(testb)//write 1 { DS=0;i++;i++;DS=1;i=8;while(i>0)i--;} else { DS=0;//write 0 i=8;while(i>0)i--;DS=1;i++;i++;} } } int tmp()//DS18B20温度读取 { float tt;int a,b;if(init18b20()==0){ WDT_CONTR=0x36;/////喂狗 EA=0;delay(1); tmpwritebyte(0xcc);// 跳过读ROM操作 tmpwritebyte(0x44);// 启动温度转换 delay(10);init18b20();delay(1);tmpwritebyte(0xcc);tmpwritebyte(0xbe);a=tmpread();b=tmpread();temp=b;temp<<=8;//将高字节温度数据与低字节温度数据整合 temp=temp|a;c=b>>4; tt=temp*0.0625; temp=tt*10+0.5;//放大10倍输出并四舍五入 EA=1;return temp;} else not=1;} //////1062///////// void ydelay(uint x){ uint a,b;for(a=x;a>0;a--)for(b=10;b>0;b--);} void write_com(uchar com){ P0=com;lcwr=0;lcrs=0;lcden=0;ydelay(10);lcden=1;ydelay(10);lcden=0;lcwr=1;} void write_date(uchar date)//写数据 { P0=date;lcwr=0;lcrs=1;lcden=0;ydelay(10);lcden=1;ydelay(10);lcden=0;lcwr=1;} void init1602()//初始化 { write_com(0x38);//设置显示模式 ydelay(20);write_com(0x0c);//开显示 ydelay(20);write_com(0x06);//指针和光标自动加一 ydelay(20);write_com(0x01);//清屏指令 ydelay(20);} ///////显示程序////// void display(int num){ uint i,A1,A2;WDT_CONTR=0x35;/////喂狗 if(c!=0)num=~num+1;A1=num/1000;A2=num%1000/100;if(not==0){ if(c!=0){ c=0;table1[0]='-';} else if(A1==0)table1[0]=' ';else table1[0]=table[A1];if(A1==0)if(A2==0)table1[1]=' ';else table1[1]=table[A2]; table1[2]=table[num%1000%100/10];table1[4]=table[num%1000%100%10];} else { table1[0]='?';table1[1]='?';table1[2]='?';table1[4]='?';} write_com(0x80);for(i=0;i<11;i++){write_date(table7[i]);delay(2);} write_com(0x8b);for(i=0;i<5;i++){write_date(table1[i]);delay(2);} write_com(0xc0);for(i=0;i<16;i++){ if(he==1)write_date(ta5[i]);else if(in==1)write_date(ta6[i]);else write_date(table3[i]);} c=0;WDT_CONTR=0x35;/////喂狗 } ////显示2//////////////////// display2(uchar bh,int dat){ uchar a,A,B;WDT_CONTR=0x35;/////喂狗 //write_com(0x01);//清屏指令 y=dat;y=y&0x8000;if(y!=0)dat=~dat+1;A=dat/1000;B=dat%1000/100;if((bh!=4)&&(bh!=5)){ if(A!=0)table4[0]=table[dat/1000];else if((c!=0)||(y!=0)){ c=0;y=0;table4[0]='-';} else table4[0]=' ';if(B!=0)table4[1]=table[B];else table4[1]=' ';table4[2]=table[dat%1000%100/10];table4[3]='.';table4[4]=table[dat%1000%100%10];} else { table4[0]=' ';if((c!=0)||(y!=0)){ c=0;y=0;table4[1]='-';} else table4[1]=' ';table4[2]=' ';table4[3]=table[dat%1000%100/10];table4[4]=table[dat%1000%100%10];} write_com(0xc4);delay(2);for(a=0;a<5;a++)write_date(table4[a]);delay(2);write_com(0x80);switch(bh){ case 1:for(a=0;a<14;a++)write_date(ta1[a]);break;case 2:for(a=0;a<14;a++)write_date(ta2[a]);break;case 3:for(a=0;a<14;a++)write_date(ta3[a]);break;case 4:for(a=0;a<14;a++)write_date(ta4[a]);break;default:break;} } ///////////x24c02////////////////// void delay24(){;;} void init24c02()//初始化 { sda=1;delay24();scl=1;delay24();} void start()//开始信号 { sda=1;delay24();scl=1;delay24();sda=0;delay24();} void stop()//停止 { sda=0;delay24();scl=1;delay24();sda=1;delay24();} void respons()//应答 { uchar i;scl=1;delay24();while((sda==1)&&(i<250))i++;scl=0;delay24();} void write_byte(uchar date)// 写数据子函数 { uchar i,temp;temp=date; for(i=0;i<8;i++){ temp=temp<<1;scl=0;delay24();sda=CY;delay24();scl=1;delay24();} scl=0;delay24();sda=1;delay24();} uchar read_byte()// 读数据子函数 { uchar i,k;scl=0;delay24();sda=1;delay24();for(i=0;i<8;i++){ scl=1;delay24();k=(k<<1)|sda;scl=0;delay24();} return k;} ///////写数据函数/////////////////// void write_add(uchar address,uint date){ start();write_byte(0xa0);respons();write_byte(address);respons();write_byte(date/256);respons();write_byte(date%256);respons();stop();} uchar read_add(uchar address)//读数据函数 { uchar date;start();write_byte(0xa0);respons();write_byte(address);respons();start();write_byte(0xa1);respons();date=read_byte();stop();return date;} void delay1ms(uchar ms){ uchar i;while(ms--){ for(i = 0;i< 250;i++){ _nop_();_nop_();_nop_();_nop_();} } } int keyf(int *num,int up,int dn){ uint i;uchar z;for(i=0;i<600;i++){ display2(n,*num);if(key1==0){ delay1ms(30);if(key1==0){ i=0;n++;if(n>=9)n=0;while(!key1)display2(n,*num);break;} } if(key2==0){ delay1ms(10);if(key2==0){ i=0;if(*num>=up)*num=up;else if(n!=4)*num=*num+1;else if(*num<100)*num=*num+5;else *num=*num+10;for(z=0;z<65;z++){ display2(n,*num);if(key2!=0)break;} while(!key2){ for(z=0;z<2;z++)display2(n,*num);if(*num>=up)*num=up;else if(n!=4)*num=*num+1;else if(*num<100)*num=*num+5;else *num=*num+10;} } } if(key3==0){ delay1ms(10);if(key3==0){ i=0;if(*num<=dn)*num=dn;else if(n!=4)*num=*num-1;else if(*num<100)*num=*num-5;else *num=*num-10;for(z=0;z<65;z++){ display2(n,*num);if(key3!=0)break;} while(!key3){ for(z=0;z<2;z++)display2(n,*num);if(*num<=dn)*num=dn;else if(n!=4)*num=*num-1;else if(*num<100)*num=*num-5;else *num=*num-10;} } } } return(*num);} void keyjc(){ uchar i=0;if(key1==0){ delay1ms(10);if(key1==0){ EA=0; for(i=0;i<20;i++){ display(tmp());} if(key1==0){ write_com(0x01);//清屏指令 n++;if(n>=5)n=0;while(!key1){ switch(n){ case 1:display2(n,acon);break;case 0:break;} } if(n==1){ keyf(&acon,1250,-530);if((acon-bcon)<3)bcon=acon-3;} if(n==2){ keyf(&bcon,1240,-550);if((acon-bcon)<3)acon=bcon+3;} write_add(1,acon);//A delay1ms(15);write_add(3,bcon);//B n=0;write_com(0x01);//清屏指令 } EA=1;} } } key(){ uint i;if(key4==0)delay1ms(50);if(key4==0){ write_com(0x01);//清屏指令 for(i=0;i<500;i++){ if(key4==0){ delay1ms(15);if(key4==0){ i=0;n++;if(n>=5)n=0;while(!key4){ switch(n){ case 1: display2(1,acon);break;case 2: display2(2,bcon);break;default: break;} } } } switch(n){ case 1: display2(1,acon);break;case 2: display2(2,bcon);break;default: break;} } n=0;} } ///////滤波//////// int filter(){ int tm,buf[6];uchar i,j;EA=0;for(i=0;i<6;i++){ buf[i]=tmp();delay1ms(20);WDT_CONTR=0x35;/////喂狗 } for(j=0;j<5;j++)for(i=0;i<5-j;i++)if(buf[i]>buf[i+1]){ tm=buf[i];buf[i]=buf[i+1];buf[i+1]=tm;} tm=((buf[2]+buf[3])/2);EA=1;return(tm);} void main(){ uchar b,c;Init_Com();init1602();init24c02(); b=read_add(1);delay1ms(15);c=read_add(2);delay1ms(15);acon=b*256+c;b=read_add(3);delay1ms(15);c=read_add(4);delay1ms(15);bcon=b*256+c; AUXR=0x01;// 禁止ALE输出 WDT_CONTR=0x35;//启动看门狗 write_com(0x01);//清屏指令 while(1){ at=filter();display(at);keyjc();key(); wen_kong();weno();} } //////温度控制////////////// void wen_kong(){ if((flag==0)&&(not==0)){ at=filter();if(at<=bcon) { flag=1;jrk=0;xhk=0;he=1;} } } void weno(){ if(flag){ at=filter();if(at>=acon){ flag=0;jrk=1;if(rsg)xhk=0;else xhk=1;he=0;} } if(not==1){ flag=0;jrk=1;if(rsg)xhk=0;else xhk=1;he=0;} } 1.有三个整数a,b,c,由键盘输入,输出其中最大的数。#include scanf(“%d%d%d”,&a,&b,&c);if(a>b&&a>c) printf(“%dn”,a);else if(b>a&&b>c) printf(“%dn”,b); else printf(“%dn”,c);} 2.编程输入整数a和b,若a2b2大于100,则输出a2b2百位以上的数字,否则输出两数之和。 #include printf(“%dn”,(d+e));else printf(“%dn”,f);} 3.有一函数: x(x1) y2x11(1x10) 3x11(x10)编写一程序,输入x,输出y值。#include y=x;else if(x<10&&x>=1) y=2*x-11; else y=3*x-11; printf(“%dn”,y);} 4.给出一百分制成绩,要求输出成绩等级’A’,’B’,’C’,’D’,’E’。90分以上为’A’,80-89分为’B’,70-79分为’C’,60-69分为’D’,60分以下为’E’ #include printf(“A”);else if(x<90&&x>=80) printf(“B”); else if(x<80&&x>=70) printf(“C”); else if(x<70&&x>=60) printf(“D”); else printf(“E”);printf(“n”);} 5.提高题:给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数是321,应输出123。#include for(i=0;j>1;i++) j=j/10;} printf(“%dnn”,i);{ for(k=1;k<=i;k++){ b=a%10; a=a/10; printf(“%d”,b);} } }.求解一元二次方程a*x2+b*x+c=0 #include int main(){ int a,b,c,m;double x1,x2,n; //解为double类型 printf(“请输入ax2+bx+c=0中的a,b,c: n”);scanf(“%d %d %d”,&a,&b,&c);//输入参数 m=(b*b-4*a*c);if(m<0) printf(“方程无解”);else n=sqrt((double)m); //对m进行强制类型转换为double,因为接为double x1=(-b-m)/(2*(double)a); x2=(-b+m)/(2*(double)a); printf(“x1=%.2lf x2=%.2lfn”,x1,x2);return 0;}.有一个分数数列: 23581321,,,求出这个数列前20项之和 1235813#include double sum(int n){ int i;double part = 0; for(i = 1.0;i <= n;i++) part +=(1.0 / i);return 2 * n-part;} int main(void){ printf(“%.18fn”, sum(20));return 0;} 将从键盘输入的偶数写成两个素数之和。#include int a,b,c,d; scanf(“%d”,&a); for(b=3;b<=a/2;b+=2) { for(c=2;c<=sqrt(b);c++) if(b%c==0)break; if(c>sqrt(b)) d=a-b; else break; for(c=2;c<=sqrt(d);c++) if(d%c==0)break; if(c>sqrt(d)) printf(“%d=%d+%dn”,a,b,d); } } 1:5位跳水高手参加10米高台跳水决赛,有好事者让5人据实力预测比赛结果.A选手说:B第二,我第三B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一.决赛成绩公布之后,每位选手的预测都只说对了一半,即一对一错.请编程解出比赛的实际名次. 1.#include #include } for(i=1;i<=4;i++) b=a[0];a[0]=a[3];a[3]=b;b=a[1];a[1]=a[2];a[2]=b;for(k=1;k<=4;k++)printf(“%d”,a[k-1]);{ } a[i-1]=(a[i-1]+5)%10;a[4-j]=b%10;b=b/10;} 2、编写程序,对输入两个正整数m和n,求出它们的最大公约数和最小公倍数 #include “stdio.h” #include “math.h” void main(){ int n,m,maxgy,mingb,i,p;printf(“please input n and m:”);scanf(“%d%d”,&n,&m);if(n>m){ p=n;n=m;m=p;/*m和n交换*/ } for(i=n;i>=1;i--) if(m%i==0&&n%i==0) break;maxgy=i;printf(“nmaxgy=%d mingb=%dn”,maxgy,m*n/maxgy); } 2、编写程序,对输入两个正整数m和n,求出它们的最大公约数和最小公倍数 #include “stdio.h” #include “math.h” void main(){ int n,m,maxgy,mingb,t,p;printf(“please input n and m:”);scanf(“%d%d”,&n,&m);if(n>m){ p=n;n=m;m=p;/*m和n交换*/ } p=m*n;while(m%n!=0){ t=m%n; m=n; n=t;} maxgy=n;printf(“nmaxgy=%d mingb=%dn”,maxgy,p/maxgy);} #include “stdio.h” #include “math.h” void main(){ int n,m,maxgy,p;int maxgy1(int m,int n);printf(“please input n and m:”);scanf(“%d%d”,&n,&m);if(n>m){ p=n;n=m;m=p;/*m和n交换*/ } p=m*n; maxgy=maxgy1(m,n);printf(“nmaxgy=%d mingb=%dn”,maxgy,p/maxgy);} int maxgy1(int m,int n){ if(n==0) return m;else return maxgy1(n,m%n);} 3输入n判断n是否为素数 #include “stdio.h” void main(){ int n,i,flag;flag=1;printf(“please input n:”);scanf(“%d”,&n);for(i=2;i if(n%i==0) { flag=0; break; } if(flag==1) printf(“n%d is ssn”,n);else printf(“n%d is not ssn”,n);} #include “stdio.h”、求100以内的所有素数,并按10个一行进行打印。#include “math.h” void main(){ int n,i,flag,sum;sum=0;for(n=2;n<=100;n++){ flag=1; for(i=2;i<=sqrt(n);i++) if(n%i==0) { flag=0; break; } if(flag==1) { sum++; printf(“%5d”,n); if(sum%10==0) printf(“n”); } } printf(“n”);} 4、用递归求1到100的和 #include return 1;else return n+lj(n-1);} 累加法求1到100的和 #include sum=sum+i;printf(“result=%dn”,sum);} #include printf(“result=%dn”,sum);} #include if(i>100) break; sum=sum+i; i++;} printf(“result=%dn”,sum);} 求20到40以及60到80中所有能被3整除数的和 #include if(i%3==0) sum=sum+i; if(i==40) i=i+19;} //i%3==0&&i>=20&&i<=40||i>=60&&i<=80 printf(“result=%dn”,sum);} A+aa+aaa+….+a…..a #include t=t*10+a; sum=sum+t;} printf(“result=%ldn”,sum);} 1、请从键盘上输入年、月、日,求该年月日是该年的第多少天? #include int year,month,day,sum=0,i;int days(int,int);printf(“please input year month and day:”);scanf(“%d%d%d”,&year,&month,&day);for(i=1;i int day;switch(month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12:day=31;break;case 4: case 6: case 9: case 11:day=30;break;case 2:if(year%4==0&&year%100!=0||year%400==0) } return day; day=29;else day=28;} 2、求3到1000内所有尾数为3的素数之和。#include } int ss(int n){ int flag=1,i;for(i=2;i<=sqrt(n);i++)if(n%i==0){ flag=0;break;int i,sum=0;int ss(int);for(i=3;i<=1000;i++)if(ss(i)==1) if(i%10==3) sum=sum+i;printf(“result=%dn”,sum); } } return flag; 3、从键盘上输入一个整数,将它拆成质因子的乘积。例如 18=2*3*3 #include } if(n%i==0){ } else i++;printf(“%d*”,i);n=n/i;printf(“b n”);} 4、从键盘上输入一串字符,统计字母、数字、空格和其它字符的个数。#include char ch;int c,d,s,o;c=d=s=o=0;while((ch=getchar())!=10){ if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') c++;else if(ch>='0'&&ch<='9') d++;else if(ch==' ') s++;else o++;} printf(“c=%dnd=%dns=%dno=%dn”,c,d,s,o);} 5、从键盘上输入10个数,求它们的最大值。#include } int n,i,max;scanf(“%d”,&n);max=n;for(i=1;i<10;i++){ scanf(“%d”,&n);if(max max=n;} printf(“max=%dn”,max);3. 一个数恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3而6=1+2+3,因此6是完数。编程找出求1000以内的所有完全数。#include “stdio.h” #include “math.h” void main(){ int n,s,i,k;for(n=1;n<=1000;n++){ s=0; for(i=1;i if(n%i==0) s=s+i; if(n==s) { printf(“%5d its factors is ”,n); for(k=1;k if(n%k==0) printf(“%d,”,k); printf(“b n”); } } printf(“n”);} .打印出杨辉三角形(要求打印出10行如下图)#include “stdio.h” #include “math.h” void main(){ long i,j,x,y,z,k;long jc(int);for(i=0;i<10;i++){ for(j=0;j<=i;j++) { x=jc(i); y=jc(j); z=jc(i-j); printf(“%4d”,x/(y*z)); } printf(“n”);} } long jc(int n){ long x=1,k;if(n==0) return 1;else for(k=1;k<=n;k++) x=x*k;return x;} #include “stdio.h” #include “math.h” void main(){ long i,j,x,y,z,k;for(i=0;i<10;i++){ for(j=0;j<=i;j++) { x=y=z=1; for(k=1;k<=i;k++) x=x*k; for(k=1;k<=j;k++) y=y*k; for(k=1;k<=i-j;k++) z=z*k; printf(“%4d”,x/(y*z)); } printf(“n”);} } 7.用*打印图形 #include “stdio.h” void main(){ int i,j,k,n;printf(“please input n:”);scanf(“%d”,&n);for(i=1;i<=n;i++)/**/ { for(j=1;j<=40-i;j++)/**/ printf(“ ”); for(k=1;k<=2*i-1;k++)/**/ printf(“*”); printf(“n”);} for(i=n-1;i>=1;i--)/**/ { for(j=1;j<=40-i;j++)/**/ printf(“ ”); for(k=1;k<=2*i-1;k++)/**/ } } printf(“*”);printf(“n”); #include int num;char name[10];char sex; int age;char xueli[30]; int wage; char addr[30]; long int tel;}em[100]; /*定义一个结构体*/ void menu();void input();void save(int);void display();void del();void add();void search();void search_num();void search_xueli();void search_tel();void modify();/*定义各函数*/ void menu() /*菜单函数*/ { printf(“ ☆☆☆计算机科学与技术学系☆☆☆n”); printf(“n”); printf(“ ∮08802班 关丽霞∮n”); printf(“n”);printf(“ ******************职工信息管理****************n”);printf(“ 1.录入职工信息”);printf(“ 2.浏览职工信息n”);printf(“ 3.查询职工信息”);printf(“ 4.删除职工信息n”); printf(“ 5.添加职工信息”);printf(“ 6.修改职工信息n”);printf(“ 7.退出n”);printf(“ ********************谢谢使用******************n”); printf(“n”); printf(“n”); } void main(){ menu();/*调用菜单函数*/ int n,flag;char a;do { printf(“请选择你需要操作的步骤(1--7):n”); scanf(“%d”,&n); if(n>=1&&n<=7) { flag=1; break; } else { flag=0; printf(“您输入有误,请重新选择!”); } } while(flag==0); while(flag==1) { switch(n) { case 1:printf(“ ◆◆◆输入职工信息◆◆◆n”);printf(“n”);input();break; case 2:printf(“ ◆◆◆浏览职工信息◆◆◆n”);printf(“n”);display();break; case 3:printf(“ ◆◆◆按职工号查询职工信息◆◆◆n”);printf(“n”);search();break; case 4:printf(“ ◆◆◆删除职工信息◆◆◆n”);printf(“n”);del();break; case 5:printf(“ ◆◆◆添加职工信息◆◆◆n”);printf(“n”);add();break; case 6:printf(“ ◆◆◆修改职工信息◆◆◆n”);printf(“n”);modify();break; case 7:exit(0);break; default :break; } getchar(); printf(“n”); printf(“是否继续进行(y or n):n”); scanf(“%c”,&a); if(a=='y') { flag=1; system(“cls”);/*清屏*/ menu();/*调用菜单函数*/ printf(“请再次选择你需要操作的步骤(1--6):n”); scanf(“%d”,&n); printf(“n”); } else exit(0);} } void input() /*录入函数*/ { int i,m; printf(“请输入需要创建信息的职工人数(1--100):n”); scanf(“%d”,&m); for(i=0;i { printf(“职工号: ”); srand((int)time(0)); em[i].num=rand()%10000+20000000; if(em[i].num!=em[i-1].num) printf(“%8d ”,em[i].num); printf(“n”); printf(“请输入姓名: ”); scanf(“%s”,em[i].name); getchar(); printf(“请输入性别(f--女 m--男): ”); scanf(“%c”,&em[i].sex); printf(“请输入年龄: ”); scanf(“%d”,&em[i].age); printf(“请输入学历: ”); scanf(“%s”,em[i].xueli); printf(“请输入工资: ”); scanf(“%d”,&em[i].wage); printf(“请输入住址: ”); scanf(“%s”,em[i].addr); printf(“请输入电话: ”); scanf(“%d”,&em[i].tel); printf(“n”); } printf(“n创建完毕!n”); save(m);} void save(int m)/*保存文件函数*/ { int i;FILE*fp;if((fp=fopen(“employee_list”,“wb”))==NULL)/*创建文件并判断是否能打开*/ { printf(“cannot open filen”); exit(0);} for(i=0;i if(fwrite(&em[i],sizeof(struct employee),1,fp)!=1) printf(“file write errorn”); fclose(fp);} int load()/*导入函数*/ { FILE*fp;int i=0; if((fp=fopen(“employee_list”,“rb”))==NULL){ printf(“cannot open filen”); exit(0);} else { do { fread(&em[i],sizeof(struct employee),1,fp); i++; } while(feof(fp)==0);} fclose(fp);return(i-1);} void display()/*浏览函数*/ { int i;int m=load();printf(“n 职工号t姓名t性别t年龄t学历t工资t住址t电话 n”);for(i=0;i printf(“n %dt%st%ct%dt%st%dt%st%ldn”,em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); } void del() /*删除函数*/ { int m=load();int i,j,n,t,flag;char name[20];printf(“n 原来的职工信息:n”); display(); /* 调用浏览函数*/ printf(“n”);printf(“请输入要删除的职工的姓名:n”);scanf(“%s”,name);for(flag=1,i=0;flag&&i if(strcmp(em[i].name,name)==0) { printf(“n已找到此人,原始记录为:n”); printf(“n职工号t姓名t性别t年龄t学历t工资t住址t电话 n”); printf(“n%dt%st%ct%dt%st%dt%st%ldn”,em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); printf(“n确实要删除此人信息请按1,不删除请按0n”); scanf(“%d”,&n); if(n==1) /*如果删除,则其他的信息都往上移一行*/ { for(j=i;j { strcpy(em[j].name,em[j+1].name); em[j].num=em[j+1].num; em[j].sex=em[j+1].sex; em[j].age=em[j+1].age; strcpy(em[j].xueli,em[j+1].xueli); em[j].wage=em[j+1].wage; strcpy(em[j].addr,em[j+1].addr); em[j].tel=em[j+1].tel; } flag=0; } } } if(!flag) m=m-1;else printf(“n对不起,查无此人!n”); printf(“n 浏览删除后的所有职工信息:n”); save(m); /*调用保存函数*/ display();/*调用浏览函数*/ printf(“n继续删除请按1,不再删除请按0n”);scanf(“%d”,&t);switch(t){ case 1:del();break; case 0:break; default :break;} } void add()/*添加函数*/ { FILE*fp;int n; int count=0; int i; int m=load(); printf(“n 原来的职工信息:n”); display(); /* 调用浏览函数*/ printf(“n”); fp=fopen(“emploee_list”,“a”); printf(“请输入想增加的职工数:n”);scanf(“%d”,&n); for(i=m;i<(m+n);i++) { printf(“n 请输入新增加职工的信息:n”); printf(“请输入职工号: ”); srand((int)time(0)); em[i].num=rand()%10000+20000000; if(em[i].num!=em[i-1].num) printf(“%8d ”,em[i].num); printf(“n”); printf(“请输入姓名: ”); scanf(“%s”,em[i].name); getchar(); printf(“请输入性别(f--女 m--男): ”); scanf(“%c”,&em[i].sex); printf(“请输入年龄: ”); scanf(“%d”,&em[i].age); printf(“请输入学历: ”); scanf(“%s”,em[i].xueli); printf(“请输入工资: ”); scanf(“%d”,&em[i].wage); printf(“请输入住址: ”); scanf(“%s”,em[i].addr); printf(“请输入电话: ”); scanf(“%d”,&em[i].tel); printf(“n”); count=count+1; printf(“已增加的人数:n”); printf(“%dn”,count);} printf(“n添加完毕!n”); m=m+count;printf(“n浏览增加后的所有职工信息:n”);printf(“n”);save(m); display(); fclose(fp);} void search()/*查询函数*/ { int t,flag;do { printf(“n按职工号查询请按1;按学历查询请按2;按电话号码查询请按3,进入主函数按4n”); scanf(“%d”,&t); if(t>=1&&t<=4) { flag=1; break; } else { flag=0; printf(“您输入有误,请重新选择!”); } } while(flag==0); while(flag==1){ switch(t) { case 1:printf(“按职工号查询n”);search_num();break; case 2:printf(“按学历查询n”);search_xueli();break; case 3:printf(“按电话号码查询n”);search_tel();break; case 4:main();break; default:break; } } } void search_num(){ int num; int i,t; int m=load(); printf(“请输入要查找的职工号(20001111---20009999):n”); scanf(“%d”,&num); for(i=0;i if(num==em[i].num){ printf(“n已找到此人,其记录为:n”); printf(“n职工号t姓名t性别t年龄t学历t工资t住址t电话 n”); printf(“n%dt%st%ct%dt%st%dt%st%ldn”,em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); break;} if(i==m) printf(“n对不起,查无此人n”); printf(“n”); printf(“返回查询函数请按1,继续查询职工号请按2n”); scanf(“%d”,&t); switch(t) { case 1:search();break; case 2: break; default:break; } } void search_xueli(){ char xueli[30]; int i,t; int m=load(); printf(“请输入要查找的学历:n”); scanf(“%s”,xueli); for(i=0;i if(strcmp(em[i].xueli,xueli)==0){ printf(“n已找到,其记录为:n”); printf(“n职工号t姓名t性别t年龄t学历t工资t住址t电话 n”); printf(“n%dt%st%ct%dt%st%dt%st%ldn”,em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); } if(i==m) printf(“n对不起,查无此人n”); printf(“n”); printf(“返回查询函数请按1,继续查询学历请按2n”); scanf(“%d”,&t); switch(t) { case 1:search();break; case 2:break; default :break; } } void search_tel(){ long int tel; int i, t; int m=load(); printf(“请输入要查找的电话号码:n”); scanf(“%ld”,&tel); for(i=0;i if(tel==em[i].tel){ printf(“n已找到此人,其记录为:n”); printf(“n职工号t姓名t性别t年龄t学历t工资t住址t电话 n”); printf(“n%dt%st%ct%dt%st%dt%st%ldn”,em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); break;} if(i==m) printf(“n对不起,查无此人n”); printf(“n”); printf(“返回查询函数请按1,继续查询电话号码请按2n”); scanf(“%d”,&t); switch(t) { case 1:search();break; case 2:break; default :break; } } void modify()/*修改函数*/ { int num;char name[10];char sex; int age;char xueli[30]; int wage; char addr[30]; long int tel; int b,c,i,n,t,flag; int m=load();/*导入文件内的信息*/ printf(“n 原来的职工信息:n”); display(); /* 调用浏览函数*/ printf(“n”); printf(“请输入要修改的职工的姓名:n”);scanf(“%s”,name);for(flag=1,i=0;flag&&i if(strcmp(em[i].name,name)==0) { printf(“n已找到此人,原始记录为:n”); printf(“n职工号t姓名t性别t年龄t学历t工资t住址t电话 n”); printf(“n%dt%st%ct%dt%st%dt%st%ldn”,em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel); printf(“n确实要修改此人信息请按1;不修改请按0n”); scanf(“%d”,&n); if(n==1) { printf(“n需要进行修改的选项n 1.职工号 2.姓名 3.性别 4.年龄 5.学历 6.工资 7.住址 8.电话n”); printf(“请输入你想修改的那一项序号:n”); scanf(“%d”,&c); if(c>8||c<1) printf(“n选择错误,请重新选择!n”); } flag=0; } } if(flag==1)printf(“n对不起,查无此人!n”); do { switch(c) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/ { case 1:printf(“职工号改为: ”); scanf(“%d”,&num); em[i-1].num=num; break; case 2:printf(“姓名改为: ”); scanf(“%s”,name); strcpy(em[i-1].name,name); break; case 3:printf(“性别改为: ”); getchar(); scanf(“%c”,&sex); em[i-1].sex=sex; break; case 4:printf(“年龄改为: ”); scanf(“%d”,&age); em[i-1].age=age; break; case 5:printf(“学历改为: ”); scanf(“%s”,xueli); strcpy(em[i-1].xueli,xueli); break; case 6:printf(“工资改为: ”); scanf(“%d”,wage); break; case 7:printf(“住址改为: ”); scanf(“%s”,addr); strcpy(em[i-1].addr,addr); break; case 8:printf(“电话改为: ”); scanf(“%ld”,&tel); em[i-1].tel=tel; break; } printf(“n”); printf(“n是否确定所修改的信息?n 是 请按1;不,重新修改 请按2: n”); scanf(“%d”,&b); } while(b==2); printf(“n浏览修改后的所有职工信息:n”); printf(“n”); save(m); display(); printf(“n继续修改请按1,不再修改请按0n”); scanf(“%d”,&t); switch(t){ case 1:modify();break; case 0:break; default :break;} }第二篇:C语言课程设计 职工信息管理系统 单链表实现程序源代码
第三篇:c语言源程序
第四篇:c语言源程序段
第五篇:C语言职工信息管理系统设计