标题:小弟制作了一个C语言通讯录,大家帮忙看下
只看楼主
douweihua
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-7-2
 问题点数:0 回复次数:0 
小弟制作了一个C语言通讯录,大家帮忙看下
/*
*Date : 6月26日
*Title:C语言编程实习
* Filename: 参考程序.c
* FileTag:
2008年第二学期短学期 编程实习 Demo

Tutors: xxxxxxVer 1.0

* Summary: 完成一个电话号码薄的管理程序,要求实现各种细节功能
* Detail:
  在日常生活中,电话作为一种重要的通讯手段,已经成为我们学习、生活、工作的重要工具。
  本实例说明了如何管理一个电话订户的信息系统,有增删改查的功能。
 
*                    本程序使用六个函数来分别解决各项功能实现
* Version: 0.1
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 200
/* 定义结构体,并取别名为SUBS */
typedef struct subs
{
    char suoxie[10];   
    char name[31];
    char profession[31];
    char address[51];
    char telephone[8];
    char mobilephone[12];
    char e_mail[31];
    char qq[16];
    char MSN[21];
}SUBS;

/* 本程序将要用到的函数原型 */
void addSub();/* 增加名片 */
void modSub();/* 修改名片 */
void delSub();/* 删除名片 */
int searchSub(int);/* 查询名片 */
int rFile(SUBS *);/* 读文件,参数为要读写到文件中的结构体指针,成功返回读的记录条数,失败返回0 */
int wFile(SUBS *,int);/* 写文件,参数为要读写到文件中的结构体指针和要写的记录条数*/
int sStruct(SUBS *s, int);/* 结构体排序,参数为要排序的结构体指针,成功返回1 */
void main()
{
    FILE *fp;
    SUBS sub[N];
    int m,n=0;
    char id[8],ch;
    if((fp=fopen("cards.dat","rb"))==NULL)
    {
        printf ("请输入注册号:");
        scanf("%s",&id);
    }
    n=rFile(sub);
    printf("欢迎 %s,您共有%d张名片!\n\n",id,n);
    do   /*显示运行时人机界面,提供菜单选择,等待用户输入功能键*/
    {
        printf("\t\t通讯录\n");
        printf("\t1. 增加名片\n");
        printf("\t2. 查询名片\n");
        printf("\t3. 修改名片\n");
        printf("\t4. 删除名片\n");
        printf("\t5. 退出\n");
        printf("请输入选择:");
        scanf(" %c",&ch);

        switch(ch)
        {
            case '1':
                addSub();
                break;
            case '2':
                searchSub(m);
                break;
            case '3':
                modSub();
                break;
            case '4':
                delSub();
                break;
            case '5':
                exit(0);
                break;
            default:
                printf("\n请输入选择1到6\n");
                break;
        }
    }while(1);
    fclose(fp);
}
/* 增加名片 */
void addSub()
{
    SUBS sub[N];
    int i=0;
    i=rFile(sub);
    if(i==N)/* 判断记录是否写满 */
    {
        printf("名片记录已满");
        return;
    }

    do
    {
        printf("\t\t\t增加新名片\n\n");
        printf("\n姓名的拼音缩写:");
        scanf("%s",sub[i].suoxie);
        printf("\n姓名:");
        scanf("%s",sub[i].name);
        printf("\n职务:");
        scanf("%s",sub[i].profession);
        printf("\n地址:");
        scanf("%s",sub[i].address);
        printf("\n固定电话:");
        scanf("%s",sub[i].telephone);
        printf("\n手机:");
        scanf("%s",sub[i].mobilephone);
        printf("\ne_mail:");
        scanf("%s",sub[i].e_mail);
        printf("\nqq:");
        scanf("%s",sub[i].qq);
        printf("\nMSN:");
        scanf("%s",sub[i].MSN);
        if(strlen(sub[i].name)!=0&&strlen(sub[i].address)!=0)
            i++;
    }while(strlen(sub[i].name)==0||strlen(sub[i].address)==0);/* 检查错误,直到输入完全符合要求 */

    printf("名片信息已被添加%d\n",wFile(sub,i));

}
/* 修改名片 */
void modSub()
{
    SUBS sub[N];
    int i,j,m=0,n=0,ch;
    char s[30];
    n=rFile(sub);
    printf("请输入姓名拼音缩写:\n");
    getch(s);
    searchSub(m);
    printf("\t\t修改名片\n");
    printf("请输入名片编号:");
    scanf(" %d",&i);
    printf("\t\t名片修改的具体信息\n");
    j=i-1;
   

printf("姓名=%s\n职务=%s\n地址=%s\n固定电话=%s\n手机=%s\ne_mail=%s\nqq=%s\nMSN=%s\n",sub[j].name,sub[j].profession,sub[j].add

ress,sub[j].telephone,sub[j].mobilephone,sub[j].e_mail,sub[j].qq,sub[j].MSN);
    printf("你确定要修改吗?(1/0)\n");   //确认是否要修改
    scanf("%d",&ch);  //输入一个整数0或1
    if(ch==1)   //如果确认修改整数为1
    do
    {
        printf("\t\t\t新的修改名片信息\n");
        printf("\n姓名的拼音缩写:");
        scanf("%s",sub[i].suoxie);
        printf("\n姓名:");
        scanf("%s",sub[i].name);
        printf("\n职务:");
        scanf("%s",sub[i].profession);
        printf("\n地址:");
        scanf("%s",sub[i].address);
        printf("\n固定电话:");
        scanf("%s",sub[i].telephone);
        printf("\n手机:");
        scanf("%s",sub[i].mobilephone);
        printf("\ne_mail:");
        scanf("%s",sub[i].e_mail);
        printf("\nqq:");
        scanf("%s",sub[i].qq);
        printf("\nMSN:");
        scanf("%s",sub[i].MSN);
        if(strlen(sub[i].name)!=0&&strlen(sub[i].address)!=0)
            i++;
    }while(strlen(sub[i].name)==0||strlen(sub[i].address)==0);/* 检查错误,直到输入完全符合要求 */
            wFile(sub,n);
            printf("修改成功!");
            return;
}
/* 删除名片 */
void delSub()
{

    SUBS sub[N];
    int i,j,m=0,k;
    char s[30];
    printf("请输入姓名拼音缩写:\n");
    getch(s);
    searchSub(m);
    printf("\t\t删除名片\n");
    printf("请输入名片编号:");
    scanf(" %d",&i);
    printf("\t\t删除名片的具体信息\n");
    j=i-1;
   

printf("姓名=%s\n职务=%s\n地址=%s\n固定电话=%s\n手机=%s\ne_mail=%s\nqq=%s\nMSN=%s\n",sub[j].name,sub[j].profession,sub[j].add

ress,sub[j].telephone,sub[j].mobilephone,sub[j].e_mail,sub[j].qq,sub[j].MSN);
    printf("你确定要删除吗?(1/0)\n");   //确认是否要删除
    scanf("%d",&k);  //输入一个整数0或1
        if(k==1)   //如果确认删除整数为1
        {
           for(;j<m;j++)/* 删除名片 */
            sub[j]=sub[j+1];
            m--; //记录数减1
        }
            wFile(sub,m);
            printf("删除成功!");
            return;
}
/* 查询名片(模糊查询) */
int searchSub(int y)
{
    SUBS sub[N];
    char s[30],temp1[30],temp2[30];
    int i,j,k,m=0,n,x=0;
loop:do
    {
    printf("请输入姓名拼音缩写:\n");
    getch(s);
    for(i=0;i<rFile(sub);i++)
    if(strlen(sub[i].suoxie)<strlen(s))
        printf("输入的拼音缩写过长,请从新输入:\n");
    }while(strlen(sub[i].suoxie)<strlen(s));
        for(i=0;i<rFile(sub);i++)
        {
            for(j=0;j<(x=strlen(s));j++)
                temp1[j]=sub[i].suoxie[j];
           if(strcmp(s,temp1)==0)
           {
               

printf("姓名=%s\n职务=%s\n地址=%s\n固定电话=%s\n手机=%s\ne_mail=%s\nqq=%s\nMSN=%s\n",sub[i].name,sub[i].profession,sub[i].add

ress,sub[i].telephone,sub[i].mobilephone,sub[i].e_mail,sub[i].qq,sub[i].MSN);
               m++;
               break;
           }
           for(k=0;k<(x=strlen(s));k++)
           {
               temp2[k]=sub[i].suoxie[k+1];
               if(strlen(temp2)<strlen(s))
                   break;
               if(strcmp(s,temp2)==0)
               {
                   

printf("姓名=%s\n职务=%s\n地址=%s\n固定电话=%s\n手机=%s\ne_mail=%s\nqq=%s\nMSN=%s\n",sub[i].name,sub[i].profession,sub[i].add

ress,sub[i].telephone,sub[i].mobilephone,sub[i].e_mail,sub[i].qq,sub[i].MSN);
                   m++;
               }
           }
        }
        if(m==0)
        {
            printf("不能找到要查询的名片信息,需从新输入姓名拼音缩写!");
            goto loop;
        }
        else
        {
            sStruct(sub,m);
            for(n=0;n<m;n++)
                printf("%d:  

姓名=%s职务=%s地址=%s固定电话=%s手机=%se_mail=%sqq=%sMSN=%s\n",n,sub[i].name,sub[i].profession,sub[i].address,sub[i].telephon

e,sub[i].mobilephone,sub[i].e_mail,sub[i].qq,sub[i].MSN);
    return m;
        }
}
/* 读文件,参数为要读写到文件中的结构体指针,成功返回读出的记录条数 */

int rFile(SUBS *s)
{
    FILE *fp;
    int i=0;
   
    if((fp=fopen("cards.dat","rb"))==NULL)
    {
        printf("不能打开名片文件!\n");
        /* getch(); */
        return 0;
    }
    else
    {
        rewind(fp);
        while(!feof(fp))
        {
            fflush(fp);
            fread(&s[i],sizeof(SUBS),1,fp);
            i++;
        }
        i--;
    }

    fclose(fp);

    return i;
}
/* 写文件,参数为要写到文件中的结构体指针,记录条数。成功返回所写记录的条数 */
int wFile(SUBS *s,int i)
{
    FILE *fp;
    int j;
   
    if((fp=fopen("cards.dat","wb"))==NULL)
    {
        printf("不能打开名片文件!\n");
        /* getch(); */
        return 0;
    }
    else
    {
        for(j=0;j<i;j++)
        {
            fflush(fp);
            fwrite(&s[j],sizeof(SUBS),1,fp);
        }
    }

    fclose(fp);
    return j;
}
/* 结构体排序,参数为要排序的结构体指针,记录条数。成功返回排序记录条数 */
int sStruct(SUBS *s, int m)
{
    SUBS temp;
    int i,j,k;
   
    for(i=0;i<m-1;i++)/* 排序 */
    { k=i;
        for(j=i+1;j<m;j++)  
            if(strcmp(s[k].suoxie,s[j].suoxie)>0)k=j;
                temp=s[k];
                s[k]=s[i];
                s[i]=temp;
    }
     return m;
}
  
程序可以运行,可就是只能添加,不能继续下面的步骤,请大家帮帮忙
搜索更多相关主题的帖子: C语言 通讯录 信息系统 
2008-07-08 16:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-223110-1-1.html




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

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