关于C语言设计的一些问题
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
static int n;/*n为教师信息的个数在整个程序中属于静态变量*/
struct teacher
{
char num[5];
char name[10];
char sex[5];
char company[10];
char adress[15];
char tel_num[11];
int jbgz; /*基本工资*/
int jt; /*津贴*/
int shbt; /*生活补贴*/
int yfgz; /*应发工资*/
int dhf; /*电话费*/
int sdf; /*水电费*/
int rent; /*房租*/
int sds; /*所得税*/
int wsf; /*卫生费*/
int gjj; /*公积金*/
int hjkk; /*合计扣款*/
int sfgz; /*实发工资*/
struct teacher *next;
}info[50];
void Introduction();
void Save();
void Insert(struct teacher *,int);
void Modify();
void Search();
void Delete();
void Show();
void Copy();
int Count1(int,int,int); /*计算应发工资*/
int Count2(int,int,int,int,int,int); /*计算合计扣款*/
int Count3(int,int); /*计算公积金**/
int main()
{
struct teacher *t,*creat(); /*链表的创建*/
int choice,i,k;
Introduction();
a: printf("请输入你的选择:\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
{
printf("请输入教师的个数:");
scanf("%d",&n);
t=creat();
printf("请按教师号开始输入教师的信息:");
printf("教师号、姓名、性别、单位名称、住址、电话号码、基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金:");
for(i=0;i<n;i++)
{
printf("NO%d:\n",i+1);
scanf("%s%s%s%s%s%s%d%d%d%d%d%d%d%d%d",info[i].num,info[i].name,info[i].sex,info[i].company,info[i].adress,info[i].tel_num,&info[i].jbgz,&info[i].jt,&info[i].shbt,&info[i].dhf,&info[i].sdf,&info[i].rent,&info[i].sds,&info[i].wsf,&info[i].gjj);
info[i].yfgz=Count1(info[i].jbgz,info[i].jt,info[i].shbt);
info[i].hjkk=Count2(info[i].dhf,info[i].sdf,info[i].rent,info[i].sds,info[i].wsf,info[i].gjj);
info[i].sfgz=Count3(info[i].yfgz,info[i].hjkk);
}
Save();
break;
}
case 2:
{
printf("请输入要在哪个节点开始插入:\n");
scanf("%d",&k);
Insert(t,k);break;
}
case 3:Modify();break;
case 4:Search();break;
case 5:Delete(t);break;
case 6:Show();break;
case 7:Copy();break;
case 8:exit(0);break;
default:printf("输入有误!请重新输入:");
}
goto a;
return 0;
}
int Count1(int a,int b,int c)
{
int d;
d=a+b+c;
return d;
}
int Couunt2(int a,int b,int c,int d,int e,int f)
{
int g;
g=a+b+c+d+e+f;
return g;
}
int Count3(int a,int b)
{
int c;
c=a+b;
return c;
}
void Introduction()
{
printf("*****************************************\n");
printf("* 教师工资管理系统 *\n");
printf("* *\n");
printf("* 1:按教师号输入教师的信息 *\n");
printf("* 2:插入一名教师的各种信息 *\n");
printf("* 3:修改一名教师的各种信息 *\n");
printf("* 4:查找一名教师的各种信息 *\n");
printf("* 5:删除一名教师的各种信息 *\n");
printf("* 6:浏览所有教师的各种信息 *\n");
printf("* 7:工资文件的备份 *\n");
printf("* 8:果断退出该程序 *\n");
printf("* *\n");
printf("* copyright by LiuChang *\n");
printf("*****************************************\n");
}
struct teacher *creat()
{
int i;
struct teacher *head;
struct teacher *rear;
struct teacher *p;
head=(struct teacher *)malloc(sizeof(struct teacher));
rear=head;
for(i=0;i<n;i++)
{
p=(struct teacher *)malloc(sizeof(struct teacher));
rear->next=p;
rear=p;
}
rear->next=NULL;
return head;
}
void Save()
{
FILE *fp;
int i;
if((fp=fopen("E:exp001.txt","w+"))==NULL)
{
printf("Can not open!\n");
exit(0);
}
for(i=0;i<n;i++)
{
if(fwrite(&info[i],sizeof(struct teacher),1,fp)!=1)
printf("\nFile write error");
}
fclose(fp);
}
void Insert(struct teacher *head,int k) /*从第k个节点开始插入教师信息*/
{
char temp[10];
int a,x=1;
struct teacher *p,*q;
p=head;
while(x<k&&p) /*查找第k个节点*/
{
p=p->next;
x++;
}
q=(struct teacher *)malloc(sizeof(struct teacher));
printf("请输入教师的号码、基本工资:");
scanf("%s",temp);
scanf("%d",&a);
strcpy(q->num,temp);
q->jbgz=a;
printf("请输入教师的姓名、津贴:");
scanf("%s",temp);
scanf("%d",&a);
strcpy(q->name,temp);
q->jt=a;
printf("请输入教师的性别、生活补贴:");
scanf("%s",temp);
scanf("%d",&a);
strcpy(q->sex,temp);
q->shbt=a;
printf("请输入教师的单位名称、电话费:");
scanf("%s",temp);
scanf("%d",&a);
strcpy(q->company,temp);
q->dhf=a;
printf("请输入教师的住址、水电费:");
scanf("%s",temp);
scanf("%d",&a);
strcpy(q->adress,temp);
q->sdf=a;
printf("请输入教师的联系电话、房租:");
scanf("%s",temp);
scanf("%d",&a);
strcpy(q->tel_num,temp);
q->rent=a;
printf("请输入教师的所得税:");
scanf("%d",&a);
q->sds=a;
printf("请输入教师的卫生费:");
scanf("%d",&a);
q->wsf=a;
printf("请输入教师的公积金:");
scanf("%d",&a);
q->gjj=a;
q->yfgz=Count1(q->jbgz,q->jt,q->shbt);
q->hjkk=Count2(q->dhf,q->sdf,q->rent,q->sds,q->wsf,q->gjj);
q->sfgz=Count3(q->yfgz,q->hjkk);
q->next=p->next;
p->next=q;
n++; /*新插入一个节点则n数目要加1*/
Save();
}
void Modify()
{
struct teacher *p,*head;
char name[15]; /*按教师姓名先查找后修改*/
printf("请输入要修改的教师的姓名:\n");
scanf("%s",name);
p=head;
while(strcmp(p->name,name)&&p!=NULL)
p=p->next;
if(p==NULL)
printf("没有找到有关该教师的信息!\n");
else
{
printf("请输入修改后的信息:\n");
scanf("%s%s%s%s%s%s%d%d%d%d%d%d%d%d%d",p->num,p->name,p->sex,p->company,p->adress,p->tel_num,p->jbgz,p->jt,p->shbt,p->dhf,p->sdf,p->rent,p->sds,p->wsf,p->gjj);
p->yfgz=Count1(p->jbgz,p->jt,p->shbt);
p->hjkk=Count2(p->dhf,p->sdf,p->rent,p->sds,p->wsf,p->gjj);
p->sfgz=Count3(p->yfgz,p->hjkk);
Save();
}
}
void Search()
{
struct teacher *p,*head;
char name[15]; /*按教师姓名查找*/
printf("请输入要修改的教师的姓名:\n");
scanf("%s",name);
p=head;
while(strcmp(p->name,name)&&p!=NULL)
p=p->next;
if(p==NULL)
printf("没有找到有关该教师的信息!\n");
else
{
printf("教师号、姓名、性别、单位名称、住址、电话号码、基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金、应发工资、合计扣款、实发工资");
printf("%s|%s|%s|%s|%s|%s|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d\n",p->num,p->name,p->sex,p->company,p->adress,p->tel_num,p->jbgz,p->jt,p->shbt,p->dhf,p->sdf,p->rent,p->sds,p->wsf,p->gjj,p->yfgz,p->hjkk,p->sfgz);
}
}
void Delete()
{
struct teacher *p,*q,*head;
char name[15]; /*按教师姓名查找*/
printf("请输入要删除的教师的姓名:\n");
scanf("%s",name);
p=head;
while(strcmp(p->name,name)&&p!=NULL)
p=p->next;
if(p==NULL)
printf("没有找到有关该教师的信息!\n");
else
{
q->next=p;
q->next=p->next;/*删除p节点*/
n--;/*因为删除了所以应该减1*/
Save();
}
free(q);
}
void Show()
{
FILE *fp;
int i;
if((fp=fopen("E:exp001.txt","rb"))==NULL)
{
printf("can not open the file!\n");
exit(0);
}
printf("教师号、姓名、性别、单位名称、住址、电话号码、基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金、应发工资、合计扣款、实发工资\n");
for(i=0;i<n;i++)
{
if(fread(&info[i],sizeof(struct teacher),1,fp)!=1)
{
if(feof(fp))return;
printf("\nFile read error");
}
printf("----------------------------------------------------------------------\n");
printf("%s|%s|%s|%s|%s|%s|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d\n",info[i].num,info[i].name,info[i].sex,info[i].company,info[i].adress,info[i].tel_num,info[i].jbgz,info[i].jt,info[i].shbt,info[i].dhf,info[i].sdf,info[i].rent,info[i].sds,info[i].wsf,info[i].gjj,info[i].yfgz,info[i].hjkk,info[i].sfgz);
}
printf("--------------------------------------------------------------------------\n");
fclose(fp);
}
void Copy()
{
FILE *fp1,*fp2;
int i;
char c,filename[20];
printf("请输入备份文件的路径:\n");
scanf("%s",filename);/*文件备份路径名*/
if((fp1=fopen("E:exp09.txt","rb"))==NULL)
{
printf("can not be opened!\n");
exit(0);
}
if((fp2=fopen(filename,"wb"))==NULL)
{
printf("can not be opened!\n");
exit(0);
}
c=fgetc(fp1);
while(c!=EOF)
{
fputc(c,fp2);/*逐个字节进行复制写入*/
fgetc(fp1);
}
fclose(fp1);
fclose(fp2);
}
编译通过了,可是运行时却出现了教师工资管理程序.obj : error LNK2001: unresolved external symbol _Count2
怎么回事啊?求大神解决啊,谢谢
[解决办法]
error LNK2001 百度一下就明白了
提示没有导入必要的库
[解决办法]
我只是初略的看了看,很快就发现了一个错误【虽然我也很菜!】
作为菜鸟级别,我简单的瞄了下:
你的scanf录入方式是错误的!
你必须一个个的定义录入scanf的方式,而不是结构体中的数据一次性全部录入进去!
printf()是输出某一段的内存数据,显然,如果同时数据所有的结构体数据,会造成printf()无法识别数据,所以,在输入结构体数据时,应该一个一个的输入,而不是像你的代码中那样一整个数据全部都scanf()搞定。
改法:把你的scanf一个个的输入!
--------
还有没别的问题我暂时没看...
--------
作为同样菜鸟的人的回答...
[解决办法]
使用gcc编译通过了。
贴的代码中,int Count2(int a,int b,int c,int d,int e,int f)中Count2写错了。
执行情况:
[root@bogon temp]# ./t6****************************************** 教师工资管理系统 ** ** 1:按教师号输入教师的信息 ** 2:插入一名教师的各种信息 ** 3:修改一名教师的各种信息 ** 4:查找一名教师的各种信息 ** 5:删除一名教师的各种信息 ** 6:浏览所有教师的各种信息 ** 7:工资文件的备份 ** 8:果断退出该程序 ** ** copyright by LiuChang ******************************************请输入你的选择:6can not open the file![root@bogon temp]# ./t6****************************************** 教师工资管理系统 ** ** 1:按教师号输入教师的信息 ** 2:插入一名教师的各种信息 ** 3:修改一名教师的各种信息 ** 4:查找一名教师的各种信息 ** 5:删除一名教师的各种信息 ** 6:浏览所有教师的各种信息 ** 7:工资文件的备份 ** 8:果断退出该程序 ** ** copyright by LiuChang ******************************************请输入你的选择:1请输入教师的个数:2请按教师号开始输入教师的信息:教师号、姓名、性别、单位名称、住址、电话号码、基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金:NO1:001sssmalliyangasdasd1234565121212312677889899012NO2:002qqqqweqasdaasda12134451234123123123123213123123123请输入你的选择:2请输入要在哪个节点开始插入:1请输入教师的号码、基本工资:001123请输入教师的姓名、津贴:12112请输入教师的性别、生活补贴:1212请输入教师的单位名称、电话费:1212请输入教师的住址、水电费:1212请输入教师的联系电话、房租:1212请输入教师的所得税:12请输入教师的卫生费:12请输入教师的公积金:12请输入你的选择:6 教师号、姓名、性别、单位名称、住址、电话号码、基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金、应发工资、合计扣款、实发工资----------------------------------------------------------------------001|sss|mal|liyang|asdasd|1234565|1212|123|12|67|78|89|89|90|12|1347|425|1772----------------------------------------------------------------------002|qqq|qweq|asda|asda|1213445|1234|123|123|123|123|213|123|123|123|1480|828|2308----------------------------------------------------------------------||||||0|0|0|0|0|0|0|0|0|0|0|0--------------------------------------------------------------------------请输入你的选择:^C[root@bogon temp]#
[解决办法]
在定义Count2函数的时候,函数名写错了(Couunt2),与前面的声明不一致。。。
骚年,我表示我也是初学者,请教你写这个花了多久?