user-0 提问: 课设，企业人事管理系统，大神求修改，不尽感激，好人一生平安

回复:
user: user-1
content: 很大的数，那就说明没有数。。。。。只是，随机分配的一个数而已！你再找找你的赋值，是否保存了。取值的过程是否正确

user: user-0
content: 引用 8 楼 qq_15033289 的回复:看了下 ，，运行结果。。惨不忍睹呀！  改了第 ·1 个，简单的改了下。。。。主要错误点就是：你的语法有错误。。。自己一个一个函数的改吧。。我就不去费神了 void input_person(person* p) { 	printf("请输入联系人信息!\n"); 	printf("请输入姓名:"); 	scanf("%s",p->name); 	printf("请输入工号:"); 	scanf("%d",&(p->number)); 	printf("请输入部门:"); 	scanf("%s",p->bu_men); 	printf("请输入职务:"); 	scanf("%s",p->zhi_wu); 	printf("请输入ID:"); 	scanf("%d",&(p->ID)); 	printf("请输入籍贯:"); 	scanf("%s",p->ji_guan); 	printf("请输入公资:"); 	scanf("%d",&(p->salary)); }大神，我修改了这个，还有个问题为啥工资查询出来的是随机值，还是很大的数，麻烦大神看看谢谢了

user: user-0
content: 引用 1 楼 u012421456 的回复:大哥，你觉得这么问，会有人帮你吗？你自己看程序吗？ 建议自己看看别人的程序，争取看懂，自己有什么不懂得，想不明白可以来问 基础知识不行，看书，搜索，帮助文档，网上的博客等能不帮忙看下撒

user: user-0
content: 我C基础还行，就是忽然间一下写大程序感觉不会，还有就是剩下的问题我真不会修改。。。。想法我已经打了注释了啊，抱歉，麻烦大家了

user: user-2
content: 大哥，你觉得这么问，会有人帮你吗？你自己看程序吗？ 建议自己看看别人的程序，争取看懂，自己有什么不懂得，想不明白可以来问 基础知识不行，看书，搜索，帮助文档，网上的博客等

user: user-0
content: 引用 4 楼 qq_15033289 的回复:#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _person { 	char name[20]; 	int number; 	char bu_men[20]; 	char zhi_wu[20]; 	long int ID; 	char ji_guan[20]; 	double salary[1000];  }person; typedef struct _addr_book { 	person per; 	struct _addr_book* next; }addr_book;  addr_book* first=NULL; void add();// 添加  void show();// 显示  void search_1(); // 搜索  void search_2(); void delet();// 删除  void save(); // 保存  void quit();// 退出  int print_menu(); addr_book* get_last(_addr_book* from); void print_person(person* p); void input_person(person* p); void bi_jiao(double a[100]); char menu[]= "+=================================================================\n" "|                         企业人事管理系统                       |\n" "+-----------------------------------------------------------------\n" "| 1  添加成员                                                    |\n" "| 2  显示该部门所有成员工资排行                                  |\n" "| 3  按照姓名查找成员                                            |\n" "| 4  按照工号查找成员                                            |\n"  "| 5  删除成员                                                    |\n" "| 6  保存                                                        |\n" "| 7  退出系统                                                    |\n" "+===================================================================\n";  int main() { 	int flg=1; 	while (flg) 	{ 		switch(print_menu()) 		{ 			case 1:  	    		add();      			break; 	    	case 2: 	    		show(); 	    		break; 			case 3: 	    		search_1(); 	    		break; 			case 4: 	    		search_2(); 	    		break; 	    	case 5: 	    		delet(); 	    		break; 			case 6: 	   			save(); 	       		break; 			case 7: 	   			quit(); 	     	    break; 		} 	} 	return 0; } void add() { 	char input='N'; 	addr_book* last=NULL; 	addr_book*new_addr=(addr_book*)malloc(sizeof(addr_book));  	new_addr->next=NULL; 	if(first==NULL) 	{ 		first=new_addr; 	} 	else 	{ 		last=get_last(first); 		last->next=new_addr;  	} 	input_person(&(new_addr->per)); 	printf("Y继续，N返回菜单"); 	getchar(); 	input=getchar(); 	if(input=='Y'||input=='y')  	{ 		add();  	} } void search_1() { 	int count=0; 	char input='N'; 	char name[20]={0}; 	addr_book* p=first; 	printf(">输入要查找的成员名字"); 	scanf("%s,name"); 	while(p!=NULL) 	{ 		if(strcmp(p->per.name,name)==0) 		{ 			print_person(&(p->per)); 		count++; 		} 		p=p->next;	 	}  	if(count==0) 	{ 		printf("查无此人");	  	} 	printf("Y继续查找，N返回菜单"); 	getchar(); 	input=getchar(); 	if(input=='Y'||input=='y') 	{ 		search_1(); 	}  }  void search_2() { 	int count=0; 	char input='N'; 	int num=0; 	addr_book* p=first; 	printf("请输入要查找的工号"); 	scanf("%d",&num);  	while(p!=NULL) 	{ 		if(num == (p->per.ID)) 		{    			print_person(&(p->per));   			count++; 		} 		p=p->next; 	} 	if(count==0) 	{ 		 printf("查无此人");     } 	printf("Y继续查找，N返回菜单\n"); 	getchar(); 	input=getchar(); 	if (input=='Y'||input=='y') 	{	 		search_2();	 	} } void show() {                int i; 	struct _person     { 		char name[20]; 		int number; 		char bu_men[20]; 		char zhi_wu[20]; 		long int ID; 		char ji_guan[20]; 		double salary[1000];      }pai_xu[100];	 	int count=0; 	struct pai_xu* p1 = NULL; 	char bu_men[20]={0}; 	addr_book* p = first; 	printf("你想要查询的部门工资排序\n"); 	scanf("%s",bu_men); 	while(p!=NULL) 	{   	    for (i=0;i<100;i++) 	 	{ 	 	   if(strcmp(p->per.bu_men,bu_men)==0) 	       { //	     	  	pai_xu[i] == p->per;/*看是否同一个部门的，如果是就放在另一个数组中进行排序*/  	     	  	// 这个没什么必要吧！只有部门相同才能进这个if 语句呀！你这样写，不论同不同都会 count++ 的  	   			count++;	        	      	       } 	 	} 	 	p=p->next;     	}  	person a[100]; 	bi_jiao(a[count].salary);/*这里有问题，但是不知道咋改，保证了a里面全是同一个部门的了按照工资排序*/  	while(p1!=NULL) 	{ 		for (i=0;i<count;i++) 		{ 			 printf("%s",	a[i].name); 			 printf("%d",	a[i].number); 			 printf("%s",	a[i].zhi_wu); 			 printf("%ld",	a[i].ID); 			 printf("%s",	a[i].ji_guan); 			 printf("%d",	a[i].salary); 		} 	}  } void bi_jiao(double a[100]) { int i,temp; for (i=0;i<100;i++)    if(a[i]<a[i+1])      {    temp=a[i];    a[i]=a[i+1];    a[i+1]=temp;      } } void delet() { int count=0; char input='N'; char name[20]={0}; addr_book* p=first; addr_book* p1=NULL; printf("请输入要删除的联系人姓名"); scanf("%s",name); while (p!=NULL) { if (strcmp(p->per.name,name)==0) { print_person(&(p->per)); count++; break; } p=p->next; } if (count==0) { printf("没有姓名为%s的人",name); } else { printf("确定要删除?Y确认，N取消");  getchar();         getchar();         input=getchar();         if(input=='Y'||input=='y')         {         	if(p==first)         	{         	first=p->next;         }         else         {         	 p1=first;         	 while(p1!=NULL)         	 {         	if(p1->next==p)         	{         	 p1->next=p->next;         	 break;         	 }         }         p1=p1->next;            	}         }         free(p);	         }  printf("继续删除其他联系人吗？Y继续删除，N返回菜单"); getchar(); input=getchar(); if (input=='Y'||input=='y') { delet(); }	 } void save() { FILE *fp; char file[100]; addr_book* p=first; printf("请输入文件名:"); scanf("%s",file); fp=fopen(file,"w"); while(p!=NULL) { fprintf(fp,"%s,%d,%s,%s,%d,%s,%d\n",p->per.name,p->per.number,p->per. bu_men,p->per.zhi_wu,p->per.ID,p->per.ji_guan,p->per.salary); p=p->next; } fclose(fp); printf("保存成功！\n按任意键返回\n"); getchar(); getchar(); } void quit() { addr_book* pdel=first; addr_book* p=NULL; if (pdel==NULL) { exit(0); }/*如果pdel的next指针不为空，表示有下一条数据*/ /*先将p指向pdel，释放掉pdel，再将p重复给pdel*/ while(pdel->next!=NULL) { p=pdel->next; free(pdel); pdel=p; }  free(pdel);/*如果pdel的next指针为空，表示没有下一条数据，直接删除该节点*/; exit(0);  } int print_menu() { int selected=0; system("cls"); printf("menu"); printf(">请选择[1~7]:"); scanf("%d",&selected); if (selected<1||selected>7) { printf("错误的选择！(请输入1~7）.按任意键继续..."); getchar(); getchar(); } return selected; } void input_person(person* p) { printf("请输入联系人信息:\n"); printf("请输入姓名:"); scanf("%s",p->name); printf("请输入工号:"); scanf("%d",p->number); printf("请输入部门:"); scanf("%s",p->bu_men); printf("请输入职务:"); scanf("%s",p->zhi_wu); printf("请输入ID:"); scanf("%d",p->ID); printf("请输入籍贯:"); scanf("%s",p->ji_guan); printf("请输入公资:"); scanf("%d",p->salary); } void print_person(person* p) { printf("姓名:%s\t工号:%d\t部门:%s\t职务:%s\tID:%d\t籍贯:%s\t工资:%d\t",p-> name,p->number,p->bu_men,p->zhi_wu,p->ID,p->ji_guan,p->salary); printf("\n"); } addr_book* get_last(addr_book* from) { addr_book* p=from; while (p->next!=NULL) { p=p->next; } return p; } 改了下 ，无错了。。。。结果什么都就不敢保证了！！为啥运行过程中会闪退啊，大神

user: user-3
content: 这种东西做很多了 很简单的

user: user-0
content: 引用 8 楼 qq_15033289 的回复:看了下 ，，运行结果。。惨不忍睹呀！  改了第 ·1 个，简单的改了下。。。。主要错误点就是：你的语法有错误。。。自己一个一个函数的改吧。。我就不去费神了 void input_person(person* p) { 	printf("请输入联系人信息!\n"); 	printf("请输入姓名:"); 	scanf("%s",p->name); 	printf("请输入工号:"); 	scanf("%d",&(p->number)); 	printf("请输入部门:"); 	scanf("%s",p->bu_men); 	printf("请输入职务:"); 	scanf("%s",p->zhi_wu); 	printf("请输入ID:"); 	scanf("%d",&(p->ID)); 	printf("请输入籍贯:"); 	scanf("%s",p->ji_guan); 	printf("请输入公资:"); 	scanf("%d",&(p->salary)); }好吧，我自己努力试试，刚把得

user: user-4
content: 写程序要先构思，想好大概的框架然后准备细节

user: user-1
content: 看了下 ，，运行结果。。惨不忍睹呀！  改了第 ·1 个，简单的改了下。。。。主要错误点就是：你的语法有错误。。。自己一个一个函数的改吧。。我就不去费神了 void input_person(person* p) { 	printf("请输入联系人信息!\n"); 	printf("请输入姓名:"); 	scanf("%s",p->name); 	printf("请输入工号:"); 	scanf("%d",&(p->number)); 	printf("请输入部门:"); 	scanf("%s",p->bu_men); 	printf("请输入职务:"); 	scanf("%s",p->zhi_wu); 	printf("请输入ID:"); 	scanf("%d",&(p->ID)); 	printf("请输入籍贯:"); 	scanf("%s",p->ji_guan); 	printf("请输入公资:"); 	scanf("%d",&(p->salary)); }

user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _person { 	char name[20]; 	int number; 	char bu_men[20]; 	char zhi_wu[20]; 	long int ID; 	char ji_guan[20]; 	double salary[1000];  }person; typedef struct _addr_book { 	person per; 	struct _addr_book* next; }addr_book;  addr_book* first=NULL; void add();// 添加  void show();// 显示  void search_1(); // 搜索  void search_2(); void delet();// 删除  void save(); // 保存  void quit();// 退出  int print_menu(); addr_book* get_last(_addr_book* from); void print_person(person* p); void input_person(person* p); void bi_jiao(double a[100]); char menu[]= "+=================================================================\n" "|                         企业人事管理系统                       |\n" "+-----------------------------------------------------------------\n" "| 1  添加成员                                                    |\n" "| 2  显示该部门所有成员工资排行                                  |\n" "| 3  按照姓名查找成员                                            |\n" "| 4  按照工号查找成员                                            |\n"  "| 5  删除成员                                                    |\n" "| 6  保存                                                        |\n" "| 7  退出系统                                                    |\n" "+===================================================================\n";  int main() { 	int flg=1; 	while (flg) 	{ 		switch(print_menu()) 		{ 			case 1:  	    		add();      			break; 	    	case 2: 	    		show(); 	    		break; 			case 3: 	    		search_1(); 	    		break; 			case 4: 	    		search_2(); 	    		break; 	    	case 5: 	    		delet(); 	    		break; 			case 6: 	   			save(); 	       		break; 			case 7: 	   			quit(); 	     	    break; 		} 	} 	return 0; } void add() { 	char input='N'; 	addr_book* last=NULL; 	addr_book*new_addr=(addr_book*)malloc(sizeof(addr_book));  	new_addr->next=NULL; 	if(first==NULL) 	{ 		first=new_addr; 	} 	else 	{ 		last=get_last(first); 		last->next=new_addr;  	} 	input_person(&(new_addr->per)); 	printf("Y继续，N返回菜单"); 	getchar(); 	input=getchar(); 	if(input=='Y'||input=='y')  	{ 		add();  	} } void search_1() { 	int count=0; 	char input='N'; 	char name[20]={0}; 	addr_book* p=first; 	printf(">输入要查找的成员名字"); 	scanf("%s,name"); 	while(p!=NULL) 	{ 		if(strcmp(p->per.name,name)==0) 		{ 			print_person(&(p->per)); 		count++; 		} 		p=p->next;	 	}  	if(count==0) 	{ 		printf("查无此人");	  	} 	printf("Y继续查找，N返回菜单"); 	getchar(); 	input=getchar(); 	if(input=='Y'||input=='y') 	{ 		search_1(); 	}  }  void search_2() { 	int count=0; 	char input='N'; 	int num=0; 	addr_book* p=first; 	printf("请输入要查找的工号"); 	scanf("%d",&num);  	while(p!=NULL) 	{ 		if(num == (p->per.ID)) 		{    			print_person(&(p->per));   			count++; 		} 		p=p->next; 	} 	if(count==0) 	{ 		 printf("查无此人");     } 	printf("Y继续查找，N返回菜单\n"); 	getchar(); 	input=getchar(); 	if (input=='Y'||input=='y') 	{	 		search_2();	 	} } void show() {                int i; 	struct _person     { 		char name[20]; 		int number; 		char bu_men[20]; 		char zhi_wu[20]; 		long int ID; 		char ji_guan[20]; 		double salary[1000];      }pai_xu[100];	 	int count=0; 	struct pai_xu* p1 = NULL; 	char bu_men[20]={0}; 	addr_book* p = first; 	printf("你想要查询的部门工资排序\n"); 	scanf("%s",bu_men); 	while(p!=NULL) 	{   	    for (i=0;i<100;i++) 	 	{ 	 	   if(strcmp(p->per.bu_men,bu_men)==0) 	       { //	     	  	pai_xu[i] == p->per;/*看是否同一个部门的，如果是就放在另一个数组中进行排序*/  	     	  	// 这个没什么必要吧！只有部门相同才能进这个if 语句呀！你这样写，不论同不同都会 count++ 的  	   			count++;	        	      	       } 	 	} 	 	p=p->next;     	}  	person a[100]; 	bi_jiao(a[count].salary);/*这里有问题，但是不知道咋改，保证了a里面全是同一个部门的了按照工资排序*/  	while(p1!=NULL) 	{ 		for (i=0;i<count;i++) 		{ 			 printf("%s",	a[i].name); 			 printf("%d",	a[i].number); 			 printf("%s",	a[i].zhi_wu); 			 printf("%ld",	a[i].ID); 			 printf("%s",	a[i].ji_guan); 			 printf("%d",	a[i].salary); 		} 	}  } void bi_jiao(double a[100]) { int i,temp; for (i=0;i<100;i++)    if(a[i]<a[i+1])      {    temp=a[i];    a[i]=a[i+1];    a[i+1]=temp;      } } void delet() { int count=0; char input='N'; char name[20]={0}; addr_book* p=first; addr_book* p1=NULL; printf("请输入要删除的联系人姓名"); scanf("%s",name); while (p!=NULL) { if (strcmp(p->per.name,name)==0) { print_person(&(p->per)); count++; break; } p=p->next; } if (count==0) { printf("没有姓名为%s的人",name); } else { printf("确定要删除?Y确认，N取消");  getchar();         getchar();         input=getchar();         if(input=='Y'||input=='y')         {         	if(p==first)         	{         	first=p->next;         }         else         {         	 p1=first;         	 while(p1!=NULL)         	 {         	if(p1->next==p)         	{         	 p1->next=p->next;         	 break;         	 }         }         p1=p1->next;            	}         }         free(p);	         }  printf("继续删除其他联系人吗？Y继续删除，N返回菜单"); getchar(); input=getchar(); if (input=='Y'||input=='y') { delet(); }	 } void save() { FILE *fp; char file[100]; addr_book* p=first; printf("请输入文件名:"); scanf("%s",file); fp=fopen(file,"w"); while(p!=NULL) { fprintf(fp,"%s,%d,%s,%s,%d,%s,%d\n",p->per.name,p->per.number,p->per. bu_men,p->per.zhi_wu,p->per.ID,p->per.ji_guan,p->per.salary); p=p->next; } fclose(fp); printf("保存成功！\n按任意键返回\n"); getchar(); getchar(); } void quit() { addr_book* pdel=first; addr_book* p=NULL; if (pdel==NULL) { exit(0); }/*如果pdel的next指针不为空，表示有下一条数据*/ /*先将p指向pdel，释放掉pdel，再将p重复给pdel*/ while(pdel->next!=NULL) { p=pdel->next; free(pdel); pdel=p; }  free(pdel);/*如果pdel的next指针为空，表示没有下一条数据，直接删除该节点*/; exit(0);  } int print_menu() { int selected=0; system("cls"); printf("menu"); printf(">请选择[1~7]:"); scanf("%d",&selected); if (selected<1||selected>7) { printf("错误的选择！(请输入1~7）.按任意键继续..."); getchar(); getchar(); } return selected; } void input_person(person* p) { printf("请输入联系人信息:\n"); printf("请输入姓名:"); scanf("%s",p->name); printf("请输入工号:"); scanf("%d",p->number); printf("请输入部门:"); scanf("%s",p->bu_men); printf("请输入职务:"); scanf("%s",p->zhi_wu); printf("请输入ID:"); scanf("%d",p->ID); printf("请输入籍贯:"); scanf("%s",p->ji_guan); printf("请输入公资:"); scanf("%d",p->salary); } void print_person(person* p) { printf("姓名:%s\t工号:%d\t部门:%s\t职务:%s\tID:%d\t籍贯:%s\t工资:%d\t",p-> name,p->number,p->bu_men,p->zhi_wu,p->ID,p->ji_guan,p->salary); printf("\n"); } addr_book* get_last(addr_book* from) { addr_book* p=from; while (p->next!=NULL) { p=p->next; } return p; } 改了下 ，无错了。。。。结果什么都就不敢保证了！！