| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 962 人关注过本帖, 1 人收藏
标题:大家帮忙看一下这个程序
只看楼主 加入收藏
e_gene
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-6-11
收藏(1)
 问题点数:0 回复次数:5 
大家帮忙看一下这个程序

一个简单的电话簿,我用TC3.0 VC++ MYTC5.2都编译不过去,而且错误的位置还不一样

三.函数原形说明

#define NULL 0

#define LEN sizeof(struct telephone)

#include<stdio.h>

struct telephone *insert(struct );

struct telephone *del(char );

int bijiao_f();

struct telephone *search(char );

struct telephone *change(char );

struct telephone *print();

struct telephone *list_f();

void insert_f();

void del_f();

void search_f();

void change_f();

void print_f();

void exit_f();

void menu_f();

mainmenu();

main();

四.电话簿系统的原程序

struct telephone /*结构体类型定义,包括:用户姓名和电话号码*/

{ char name[20];

char number[20];

struct telephone *next;

};

int n,k=0;

FILE *fp;

struct telephone *head; /*全程变量,链头指针*/

struct telephone *creat(void)/*全程变量,用于指明当前在链表中的位置*/

{ struct telephone *p1,*p2;

fp=fopen("d:\\cage.txt","r"); /*建立cage储存文件,用户资料将存入其中*/

n=0;

p1=p2=(struct telephone *) malloc(LEN);

fscanf(fp,"%s %s", p1->name,p2->number);

head=NULL;

while(p1->name[0]!='0')

{ n=n+1;

if(n==1) head=p1;

else p2->next=p1;

p2=p1;

p1=(struct telephone *) malloc(LEN);

fscanf(fp,"%s %s",p1->name,p1->number);

}

p2->next=NULL;

fclose(fp);

}

struct telephone *insert(struct telephone *insert_name)

/* 在链表中增加一个记录 */

{ struct telephone *p0,*p1,*p2;

p1=head; p0=insert_name;

if(head==NULL) {head=p0;p0->next=NULL;}

else

{ while((strcmp(p0->name,p1->name)>0)&&(p1->next!=NULL))

/* 根据姓氏,返回其在链表中的正确位置。新节点即将插入此点*/

{ p2=p1; p1=p1->next;}

if(strcmp(p0->name,p1->name)<= 0)

{ if(head==p1) head=p0;

else p2->next=p0;

p0->next=p1;}

else

{ p1->next=p0;p0->next=NULL;}

}

n=n+1;k=1;

}

struct telephone *del(char name_del[20]) /* 删除节点*/

{ struct telephone *p1,*p2;

p1=p2=head;

if(head==NULL){printf("\n电话簿为空!\n");system("pause");mainmenu();}

else

{

while((strcmp(name_del,p1->name)!=0)&&(p1->next!=NULL))

{p2=p1;p1=p1->next;}

if (strcmp(name_del,p1->name)==0)

{ if(p1==head) head=p1->next;

else p2->next=p1->next;

n=n-1;k=1;

}

else printf("%s不存在!\n",name_del);

}

}

int bijiao_f(char name_search[20],char name[20])/*比较字符,使查询功能完备*/

{int k=0;int i,t;

t=strlen(name_search);

for(i=0;i<=t-1&&name_search[i]==name[i];i++) {k++;}

if(k==t) return(1);

else return(0);

}

struct telephone *search(char name_search[20])

/*利用姓名进行查询(可输入前几位字母进行查询)*/

{

struct telephone *p;int j=0,h=0;

p=head;

if(head==NULL){printf("\n电话簿为空!\n"); system("pause");mainmenu();}

else {

while(p->next!=NULL)

{h=bijiao_f(name_search,p->name);

if(h==1)

{j=1;

printf("恭喜你!找到用户: ");

printf("%s\n号码:%s\n",p->name,p->number);

}

p=p->next;

}

if(j==0) {printf(" %s不存在\n",name_search); search_f();}

}

system("pause");mainmenu();

}

struct telephone *change(char name_change[20]) /*修改用户资料*/

{ struct telephone *p;

p=head;

if(head==NULL) {printf("\n电话簿为空!\n");system("pause");mainmenu();}

else {

while(strcmp(name_change,p->name)!=0 && p->next!=NULL) p=p->next;

if(strcmp(name_change,p->name)==0)

{ printf("\n");

printf("找到用户: ");

printf("%s",p->name);

printf("\n号码:%s\n",p->number);

del(p->name);

printf("将姓名修改为:\n");

scanf("%s",p->name);

del(p->number);

printf("将号码修改为:\n");

scanf("%s",p->number);

insert(p);

k=1;

printf("修改成功\n完成自动排序.\n");

system("pause");

mainmenu(); /*返回主菜单*/

}

else {printf("%s不存在!\n",name_change);change_f();}

}

}

struct telephone *print()

{ struct telephone *p;

fp=fopen("d:\\cage.txt","w");

p=head;

if (head!=NULL)

do

{

fprintf(fp,"%s ",p->name);

p=p->next;

}while(p!=NULL);

fprintf(fp,"0");

fclose(fp);

k=0;

}

void insert_f() /*添加用户资料*/

{struct telephone *name_insert;

printf("输入要插入的用户的姓名和号码<输入0返回主菜单>:");

name_insert=(struct telephone *)malloc(LEN);

scanf("%s %s",name_insert->name,name_insert->number);

while(name_insert->name[0]!='0')

{ insert(name_insert);

printf("success\n");

printf("输入要插入的用户的姓名和号码<输入0返回主菜单>:");

name_insert=(struct telephone *)malloc(LEN);

scanf("%s %s",name_insert->name,name_insert->number);

}

mainmenu(); /*返回主菜单*/

}

void del_f() /*删除用户资料*/

{char name_del[20];

printf("输入要删除的用户<输入0返回主菜单>:");

scanf("%s",&name_del);

while(name_del[0]!='0')

{ del(name_del);printf("success\n");

printf("输入要删除的用户<输入0返回主菜单>:");

scanf("%s",&name_del);

}

2004-06-11 19:52
e_gene
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-6-11
收藏
得分:0 

mainmenu(); /*返回主菜单*/

}

void search_f() /*查找用户资料*/

{ char name_search[20];

printf("请输入你要查找的用户<输入0返回主菜单>: ");

scanf("%s",name_search);

if(name_search[0]!='0') search(name_search);

else mainmenu();

}

void change_f() /*修改用户资料*/

{ char name_change[20];

printf("输入你要修改的用户<输入0返回主菜单>: ");

scanf("%s",name_change);

if(name_change[0]!='0') change(name_change);

else mainmenu();

}

struct telephone *list_f() /* 显示节点内容.*/

{

struct telephone *p;

printf("\n共有%d个用户:\n",n);printf("姓名 号码\n");

p=head;

if(head!=NULL)

do

{

printf("%-15s%-15s",p->name,p->number);

p=p->next;

printf("\n");

}while (p!=NULL);

printf("\n\n***************\n");

system("pause");

mainmenu();

}

void print_f() /*程序退出,将链表数据写回文件*/

{ print();

printf("\n已保存\n");

system("pause");

mainmenu();

}

void exit_f() /*退出电话簿系统*/

{

system("cls");/*执行系统命令:cls-清屏*/

if(k==1)

{ char name_exit;

printf("\n\n\n\n\n");

printf("================注意==================\n\n");

/*提示用户注意保存资料*/

printf(" 电话簿的改动尚未保存\n 要保存到文件请输入'y';\n 取消输入'n';\n请输入命令:");

name_exit=getchar();

if (name_exit=='y')

{ print();system("cls");printf("------>>> 已保存 <<<------\n");}

else {system("cls");printf("------>>> 已取消 <<<------\n");}

}

printf("\n\n\n\n\n\n\n\n 再见\n");

}

void menu_f() /* Display menu.-- 主菜单显示 */

{

system("cls");

printf("=========================菜单=========================\n");

printf("*****This is dictionary system! Please choose one order!*****\n");

printf("系统提示:请正常退出系统,以防丢失未保存的数据。\n");

printf(" 1: 插入用户\n");

printf(" 2: 删除用户\n");

printf(" 3: 查找用户\n");

printf(" 4: 修改用户\n");

printf(" 5: 显示全部用户\n");

printf(" 6: 保存到文件\n");

printf(" 0: 退出系统\n");

printf("*********请选择:");

}

mainmenu() /*根据用户选择(choice)调用对应处函数*/

{ int nMenuChoice;

menu_f();

scanf("%d",&nMenuChoice);

switch(nMenuChoice)

{

case 1: insert_f();break;

case 2: del_f();break;

case 3: search_f();break;

case 5: list_f();break;

case 4: change_f();break;

case 6: print_f();break; /*将链表中的数据写回文件*/

case 0: exit_f();break;

default: /* 用户键入其它选择*/

{printf("============对不起没有该命令===========\n请选择上面的选项!\n");system("pause");mainmenu();}

}

}

main() /*开篇提示用户系统名称*/

{ creat();

printf("\n=========================简易电话簿程序1.0版=======================\n");

printf("\n\n\n\n\n\n\n\n\n\n");

printf(" 请按任意键继续.................");

printf("\n\n\n\n\n\n\n\n\n\n");

printf("===============================谢谢光临==============================\n");

system("pause");

mainmenu();

}

2004-06-11 19:52
jzh2004
Rank: 1
等 级:新手上路
帖 子:341
专家分:0
注 册:2004-4-30
收藏
得分:0 

你漏了好几个头文件

我加了三个,是在VC下编译的

#include <string.h> #include <malloc.h> #include <stdlib.h>

还有你函数没有返回值,申明函数时要加返回类型的,(在VC中)

还有主函数不用声明的

你程序太长我也不知道你的函数到底返回什么,所以这些你自己改吧


我的主页 http://www.
2004-06-11 23:02
e_gene
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-6-11
收藏
得分:0 

malloc在stdlib.h里面有,好像不用加个库文件

你的意思是说函数加里面加return()吗?就是返回空值?

2004-06-11 23:15
jzh2004
Rank: 1
等 级:新手上路
帖 子:341
专家分:0
注 册:2004-4-30
收藏
得分:0 

不是,你有几个函数没有声明返回类型

返回空值不要return的


我的主页 http://www.
2004-06-11 23:30
e_gene
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2004-6-11
收藏
得分:0 

调用那些函数都是不需要有返回值的

而且返回值问题都是WARNING

现在是这个程序有2个error

是下面两个函数的,说类型不对

void search_f() /*查找用户资料*/

{ char name_search[20];

printf("请输入你要查找的用户<输入0返回主菜单>: ");

scanf("%s",name_search);

if(name_search[0]!='0') search(name_search);

else mainmenu();

}

void change_f() /*修改用户资料*/

{ char name_change[20];

printf("输入你要修改的用户<输入0返回主菜单>: ");

scanf("%s",name_change);

if(name_change[0]!='0') change(name_change);

else mainmenu();

}

2004-06-12 00:02
快速回复:大家帮忙看一下这个程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027809 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved