实现一个通讯录并将信息保存到文本中

contact.h

#ifndef __CONTACT_H__
#define __CONTACT_H__

#include <stdlib.h>
#include <stdio.h>

#define NAME_LEN 20
#define SEX_LEN  5
#define TELE_LEN  12
#define ADDR_LEN 20
#define MAX_PEO  1000

typedef struct Peo
{
    char name[NAME_LEN];
    int age;
    char sex[SEX_LEN];
    char tele[TELE_LEN];
    char addr[ADDR_LEN];
}PEO,*PPEO;

typedef struct Contact
{
    PEO dhb[MAX_PEO];//存储人的信息

    int count;//记录有效个数

}PCON,*Pcon;

void add_peo(Pcon pcon);
void del_peo(Pcon pcon);
void search(Pcon pcon);
void modify(Pcon pcon);
void show(Pcon pcon);
void clear(Pcon pcon);
void init(Pcon pcon);
void save(Pcon pcon);

#endif

text.c

#include <stdio.h>
#include "contact.h"

void print_menu()
{
    printf("*************************************\n");
    printf("*****1:add                2:del******\n");
    printf("*****3:search             4:modify***\n");
    printf("*****5:show               6:clear****\n");
    printf("************* 7:save ****************\n");
    printf("*************************************\n");
}

int main()
{
    PCON con;
    int input = 1;
    con.count = 0;
    init(&con);
    while(input)
    {
        print_menu();
        printf("请选择操作:\n");
        scanf("%d",&input);
        switch(input)
        {
        case 1:

            add_peo(&con);
            break;
        case 2:
            del_peo(&con);
            break;
        case 3:
            search(&con);
            break;
        case 4:
            modify(&con);
            break;
        case 5:
            show(&con);
            break;
        case 6:
            clear(&con);
            break;
        case 7:
            save(&con);
            break;
        default:
            break;
        }
    }
    return 0;
}

main.c

#include<stdio.h>
#include<string.h>
#include"contact.h"

int find(char *p, Pcon pcon)
{
    int i = 0;
    for(;i < pcon->count; i++)
    {
        if(strcmp(pcon->dhb[i].name,p) == 0)
            return i;
    }
    return -1;
}

void add_peo(Pcon pcon)
{
    if(pcon->count < MAX_PEO)
    {
        printf("请输入姓名、年龄、性别、电话、住址:\n");
        scanf("%s",pcon->dhb [pcon->count].name);
        scanf("%d",&pcon->dhb [pcon->count].age);
        scanf("%s",pcon->dhb [pcon->count].sex);
        scanf("%s",pcon->dhb [pcon->count].tele);
        scanf("%s",pcon->dhb [pcon->count].addr);

    }
    pcon->count ++;
    printf("存储成功\n");

}
void del_peo(Pcon pcon)
{
    int i = 0;
    int ret = 0;
    char name[10];
    printf("请输入要删除的名字:\n");
    scanf("%s",name);
    ret = find(name,pcon);
    if(ret == -1)
    {
        printf("无此联系人\n");
    }
    else
        for(i = ret; i < pcon->count-1; i++)
        {
            pcon->dhb[i] = pcon->dhb[i + 1];
        }
        pcon->count--;
        printf("删除成功\n");
}
void search(Pcon pcon)
{
    int i = 0;
    int ret = 0;
    char name[10];
    printf("请输入要查找人的名字:\n");
    scanf("%s",name);
    ret = find(name,pcon);
    if(ret == -1)
    {
        printf("无此联系人\n");
    }
    else
    {
        printf("姓名:%10s\t",pcon->dhb[i].name);
        printf("年龄:%10d\t",pcon->dhb[i].age);
        printf("性别:%10s\t",pcon->dhb[i].sex);
        printf("电话:%10s\t",pcon->dhb[i].tele);
        printf("住址:%10s\t",pcon->dhb[i].addr);
        printf("\n");
    }
}

void modify(Pcon pcon)
{
    int i = 0;
    int ret = 0;
    char name[10];
    printf("请输入要查找人的名字:\n");
    scanf("%s",name);
    ret = find(name,pcon);
    printf("请输入姓名、年龄、性别、电话、住址:\n");
    scanf("%s",pcon->dhb [i].name);
    scanf("%d",&pcon->dhb [i].age);
    scanf("%s",pcon->dhb [i].sex);
    scanf("%s",pcon->dhb [i].tele);
    scanf("%s",pcon->dhb [i].addr);
    printf("修改成功\n");

}

void show(Pcon pcon)
{
    int i = 0;
    for(; i <pcon->count; i++)
    {
        printf("姓名:%10s\t",pcon->dhb[i].name);
        printf("年龄:%10d\t",pcon->dhb[i].age);
        printf("性别:%10s\t",pcon->dhb[i].sex);
        printf("电话:%10s\t",pcon->dhb[i].tele);
        printf("住址:%10s\t",pcon->dhb[i].addr);
        printf("\n");
    }
}

void clear(Pcon pcon)
{
    pcon->count = 0;
}

void init(Pcon pcon)
{
    int i = 0;
    FILE *pfread = fopen("contact.txt","r");
    if(pfread == NULL)
    {
        perror("contact.txt");
        exit(EXIT_FAILURE);
    }
    while(fread(&(pcon->dhb[i]),sizeof(PEO),1,pfread)==1)
    {
        i++;
    }
    pcon->count = i;
    fclose(pfread);
}

void save(Pcon pcon)
{
    int i = 0;
    FILE *pfwrite = fopen("contact.txt","w");
    if(pfwrite == NULL)
    {
        perror("contact.txt");
        exit(EXIT_FAILURE);
    }
    for(i= 0;i<pcon->count;i++)
    {
        fwrite(&(pcon->dhb[i]),sizeof(PEO),1,pfwrite);
    }
    fclose(pfwrite);
}
时间: 2024-12-13 05:47:01

实现一个通讯录并将信息保存到文本中的相关文章

读取文本信息,拆分文本信息,根据拆分的文本信息保存在字典中

using System.Collections;using System.Collections.Generic;using UnityEngine; public class ObjectsInfo : MonoBehaviour { private Dictionary<int, ObjectInfo> objectInfoDict = new Dictionary<int, ObjectInfo>();//多个物品信息保存在字典中 ObjectInfo是一个类,在下面有定义

JAVA之IO技术-将java程序的异常信息保存在文件中

package ioTest.io2; import java.io.FileNotFoundException; import java.io.PrintStream; import java.util.Properties; /* * 将应用程序的异常信息输出到指定的log文件中 */ public class ExceptionToFile { public static void main(String[] args) throws FileNotFoundException { int

使用SharedPreferences将姓名和年龄信息保存在文件中,并读取信息

第一个是XML文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:id="@+id/activi

【ThinkingInJava】24、捕获一个异常之后抛出另外一个异常,并且希望吧原始的信息保存下来

/** * 书本:<Thinking In Java> * 功能:捕获一个异常之后抛出另外一个异常,并且希望吧原始的信息保存下来,这个被称为异常链 * 文件:DynamicFields.java * 时间:2015年4月9日16:24:44 * 作者:cutter_point */ package Lesson12_error_handling_with_exceptions; import static net.mindview.util.Print.*; class DynamicFiel

表单提交时如何将错误信息传递到页面中,并且保存原来提交数据

曾经何时,你还有我或许都在困惑,如何方便的将验证不通过的表单信息再返回到前台页面,例如我注册一个账号,辛辛苦苦填写了N多项,一个格式验证没有通过,一切都需要充填,虽然Ajax可以解决这个问题,但是我们总不能把所有表单提交都弄成ajax,更何况有若干人就是没事把javascript给禁止了.哎哎,好了解决方案来了,下面以用户登录为例,说说我的解决方案. 服务器端用nodejs实现: login.html 简单的提交表单 <form action="" id="loginF

asp.net信息保存总结

ASP.NET保存信息总结(Application.Session.Cookie.ViewState和Cache等) 以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping) 在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么?    为了更清楚的了解,我们总结出每一

C语言利用结构体实现一个通讯录

实现一个通讯录: 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 提供以下方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 以名字排序所有联系人 7. 清空所有联系人 student.h: #ifndef __CRT #define _CRT_SECURE_NO_WARNINGS 1 #endif #ifndef __STUDENT #ifndef __STDIO_H

【c语言】实现一个通讯录

实现一个通讯录: 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 提供方法: 1.    添加联系人信息 2.    删除指定联系人信息 3.    查找指定联系人信息 4.    修改指定联系人信息 5.    显示所有联系人信息 6.    清空所有联系人 //头文件: #ifndef _CONTACT__ #define _CONTACT__ #define NAME_MAX 20 #define SEX_MAX 5 #define TELE_MAX

利用html5的本地存储功能实现登录用户信息保存

在HTML5中,本地存储是一个window的属性,包括localStorage和sessionStorage,从名字应该可以很清楚的辨认二者的区别,前者是一直存在本地的,后者只是伴随着session,窗口一旦关闭就没了.二者用法完全相同,这里以localStorage为例. 用户名.密码保存,自动登录等,可以通过设置cookie实现,第一次登录网站后在本地计算机的中写入cookie,之后再次登录此网站查看cookie中现有的值,用cookie值进行网站登录即可.但是 cookie 不适合大量数据