NBeeeeee 发表于 2015-12-28 17:49:29

求大神帮帮忙

来大神帮帮忙给~~~

习惯喜欢 发表于 2015-12-28 17:49:30

本帖最后由 康小泡 于 2016-1-14 13:53 编辑

仅供参考

#include <stdio.h>
#include <malloc.h>//得到指向大小为Size的内存区域的首字节的指针//
#include <string.h>
#include <stdlib.h>//标准库函数//
#define NULL 0
#define LEN sizeof(struct address_list)//计算字节//



int n;
struct address_list
{
        char name;   //名字
        char work;   //职业
        char handset;//手机
        char email;    //电子邮件
        char address;//通讯地址
        struct address_list *next;
};
struct address_list *shifang(struct address_list *head); // 释放内存函数声明



//创建函数,不带头结点的链表
struct address_list *creat(void)      
{
        struct address_list *head,*p1,*p2;
        char name;
        n=0;
        p1=(struct address_list *)malloc(LEN);
        p2=p1;   //强制内存转换
        printf("请输入通讯录的内容!\n姓名输入为0时表示创建完毕!\n");
        printf("请输入姓名:");
        gets(name);
        if(strcmp(name,"0")!=0)
        {
                strcpy(p1->name,name);
                printf("请输入职业:");   gets(p1->work);
                printf("请输入手机:");   gets(p1->handset);
                printf("请输入电子邮件:"); gets(p1->email);
                printf("请输入通讯地址:");gets(p1->address);
                head=NULL;
                while(1)
                {
                        n=n+1;   //记录通讯录人数个数
                        if(n==1)
                                head=p1;
                        else
                                p2->next=p1;
                        p2=p1;
                        printf("请输入姓名:");
                        gets(name);
                        if(strcmp(name,"0")==0)
                        {
                                break;
                        }
                        else
                        {
                                p1=(struct address_list *)malloc(LEN);
                                strcpy(p1->name,name);
                                printf("请输入职业:"); gets(p1->work);
                                printf("请输入手机:"); gets(p1->handset);
                                printf("请输入电子邮件:"); gets(p1->email);
                                printf("请输入通讯地址:");gets(p1->address);
                        }
                }
                p2->next=NULL;
                return head;
        }
        else
                return 0;
}


//输出函数
void print(struct address_list *head)   
{
        struct address_list *p;
        if(head!=NULL)
        {
                p=head;
                printf("本通讯录现在共有%d人:\n",n);
                printf("---姓名-----------------职业--------------手机-------Email-------------通讯地址\n");
                printf("*******************************************************************************\n");
                do
                {
                        printf("%s",p->name); printf("            ");
                        printf("%s",p->work);    printf("            ");
                        printf("%s",p->handset); printf("            ");
                        printf("%s",p->email);   printf("         ");
                        printf("%s",p->address); printf("      \n");
                        p=p->next;
                }while(p!=NULL);
                printf("*******************************************************************************\n");
        }
        else
                printf("通讯录为空,无法输出!\n");
}



//增加函数
struct address_list *insert(struct address_list *head)
{
        struct address_list *p0,*p1,*p2;
        char name;
        p1=head;
        printf("请输入增加的内容:\n");
        printf("请输入姓名:"); gets(name);
        if(strcmp(name,"0")==0)
        {
                printf("姓名不能为0,增加失败!\n");
                return(head);
        }
        else
        {
                p0=(struct address_list *)malloc(LEN);
                strcpy(p0->name,name);
                printf("请输入职业:"); gets(p0->work);
                printf("请输入手机:"); gets(p0->handset);
                printf("请输入电子邮件:"); gets(p0->email);
                printf("请输入通讯地址:");gets(p0->address);
                n=n+1;
                if(head==NULL)
                {
                        head=p0;
                        p0->next=NULL;
                        return head;
                }
                else
                {
                        while(strcmp(p0->name,p1->name)>0&&(p1->next!=NULL))
                        {
                                p2=p1;
                                p1=p1->next;
                        }
                        if(strcmp(p0->name,p1->name)<0 || 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;
                        }
                        return head;
                }
        }
}




struct address_list* delete_txl(struct address_list *head)
{
        struct address_list *p,*q;
        char name;
        if(head==NULL)
        {
                printf("通讯录为空,无法显示!\n");
                return head;
        }
        p=head;
        printf("请输入需要删除的人的姓名:");
        gets(name);
        if(strcmp(head->name,name)==0)
        {
                head=head->next;
                free(p);
                printf("删除操作成功!\n");
                return head;
        }
        else
        {
                q=head,p=head->next;
                while(p!=NULL)
                {
                        if(strcmp(p->name,name)==0)
                        {
                                q->next=p->next;
                                free(p);
                                printf("删除操作成功!\n");
                                return head;
                        }
                        p=p->next;
                        q=q->next;
                }
        }
}



//显示函数
struct address_list *display(struct address_list *head)
{
        struct address_list *p1,*p2;
        char name;
        int m;
        if(head==NULL)
        {
                printf("通讯录为空,无法显示!\n");
                return head;
        }
        p1=head;
        m=0;
        printf("请输入需要显示人的姓名:");
        gets(name);
        while(p1!=NULL)
        {
                while((strcmp(p1->name,name))!=0 && p1->next!=NULL)
                {
                        p2=p1;
                        p1=p1->next;
                }
                if(strcmp(p1->name,name)==0)
                {
                        m++;
                       


                        printf("%s的通讯内容如下:\n",name);
                        printf("---姓名-----------------职业--------------手机-------Email-------------通讯地址\n");
                        printf("*******************************************************************************\n");
                        printf("%s",p1->name);printf("            ");
                        printf("%s",p1->work);printf("            ");
                        printf("%s",p1->handset);printf("            ");
                        printf("%s",p1->email);printf("         ");
                        printf("%s",p1->address); printf("      \n");
                        printf("*******************************************************************************\n");
                }
                p1=p1->next;
        }
        if(m==0)
        {
                printf("此人未在本通讯录中!\n");
        }
        return(head);
}

//排序函数
struct address_list *paixu(struct address_list *head)
{
        struct address_list *p1,*p2;
        int i,j;
        struct address_list1
        {
                char name;
                char work;
                char handset;
                char email;
                char address;
        };
        struct address_list1 px;
        struct address_list1 temp;
        if(head==NULL)
        {
                printf("通讯录为空,无法排序!\n");
                return(head);
        }
        p1=head;
        for(i=0;i<n,p1!=NULL;i++)
        {
                strcpy(px.name,p1->name);
                strcpy(px.work,p1->work);
                strcpy(px.handset,p1->handset);
                strcpy(px.email,p1->email);
                strcpy(px.address,p1->address);
                p2=p1;
                p1=p1->next;
        }
        head=shifang(head);
        for(j=0;j<n-1;j++)
        {
                for(i=j+1;i<n;i++)
                {
                        if(strcmp(px.name,px.name)<0)
                        {
                                temp=px;
                                px=px;
                                px=temp;
                        }
                }
        }
        p1=(struct address_list *)malloc(LEN);
        p2=p1;
        strcpy(p1->name,px.name);
        strcpy(p1->work,px.work);
        strcpy(p1->handset,px.handset);
        strcpy(p1->email,px.email);
        strcpy(p1->address,px.address);

        head=p1;
        for(i=1;i<n;i++)
        {
                p1=(struct address_list *)malloc(LEN);
                strcpy(p1->name,px.name);
                strcpy(p1->work,px.work);
                strcpy(p1->handset,px.handset);
                strcpy(p1->email,px.email);
                strcpy(p1->address,px.address);
                p2->next=p1;
                p2=p1;
        }
        p2->next=NULL;
        printf("按姓名排序后为:\n");
        print(head);
        return(head);
}



//姓名查找函数
struct address_list *search(struct address_list *head)
{
        struct address_list *p1,*p2;
        int m;
        char name;
        if(head==NULL)
        {
                printf("通讯录为空,无法分类查找!\n");
                return(head);
        }
        p1=head;
        //printf("********************\n");
        printf("请输入需要查找的姓名:");
//        printf("********************\n");
        m=0;
        gets(name);
        while(p1!=NULL)
        {
                while(strcmp(p1->name,name)!=0&&p1->next!=NULL)
                {
                        p2=p1;
                        p1=p1->next;
                }
                if(strcmp(p1->name,name)==0)
                {
                        m++;
                        printf("你查找的内容是:\n");
                        printf("*******************************************************************************\n");
                        printf("++ %s      %s       %s       %s      %s\n",p1->name,p1->work,p1->handset,p1->email,p1->address);
                        printf("*******************************************************************************\n");
                }
                p1=p1->next;

                if(m==0)
                {
                        printf("此人未在本通讯录中!\n");
                }
                break;
        }

        return(head);
}

//释放内存函数
struct address_list *shifang(struct address_list *head)
{
        struct address_list *p1;
        while(head!=NULL)
        {
                p1=head;
                head=head->next;
                free(p1);
        }
        return(head);
}

//文件写入函数
void save(struct address_list *head)
{
        FILE *fp;
        struct address_list *p1;
        char tong;
        if(head==NULL)
        {
                printf("通讯录为空,无法存储!\n");
                return;
        }
        printf("请输入保存后的文件名:");
        gets(tong);
        fp=fopen("(tong).txt","w");
        if(fp==NULL)
        {
                printf("cannot open file\n");
                return;
        }
        p1=head;
        fprintf(fp,"姓名    职业      手机   Email   通讯地址\n");
        for(;p1!=NULL;)
        {
                fprintf(fp,"%s       %s       %s      %s       %s\n",p1->name,p1->work,p1->handset,p1->email,p1->address);
                p1=p1->next;
        }
        printf("保存完毕!\n");
        fclose(fp);
}




//文件读出函数
struct address_list *load(struct address_list *head)
{
        FILE *fp;
        char tong;
        struct address_list *p1,*p2;
        printf("请输入要输出的文件名:");
        gets(tong);
        fp=fopen("(tong).txt","r");
        if(fp==NULL)
        {
                printf("此通讯录名不存在,无法输出!\n");
                return(head);
        }
        else
        {
                head=shifang(head);
        }
        p1=(struct address_list *)malloc(LEN);
        fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);
        if(feof(fp)!=0)
        {
                printf("文件为空,无法打开!\n");
                return(head);
        }
        else
        {
                rewind(fp);
                p2=p1;
                head=p1;
                n=0;
                while(feof(fp)==0)
                {
                        fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);
                        if(feof(fp)!=0)
                                break;
                        p2->next=p1;
                        p2=p1;
                        p1=(struct address_list *)malloc(LEN);
                        n=n+1;
                }
                p2->next=NULL;
                p1=head;
                head=head->next;
                n=n-1;
                free(p1);
                print(head);
                printf("打开完毕!\n");
                return(head);
        }
        fclose(fp);
}



//综合操作函数
struct address_list *menu(struct address_list *head)
{
        char num;
        while(1)
        {
                printf("\t\t\t*********************************************\n");
                printf("\t\t\t*** 1 姓名查找                           ****\n");
                printf("\t\t\t*** 2 单个显示                           ****\n");
                printf("\t\t\t*** 3 增加                               ****\n");
                printf("\t\t\t*** 4 退出                               ****\n");
                printf("\t\t\t*********************************************\n");
                printf("请输入您选择的操作:");
                gets(num);
                switch(*num)
                {
                case '1':
                        {
                                head=search(head);                        //姓名查找
                                print(head);
                        }
                        break;
                case '2':
                        {
                                head=display(head);                        //显示
                        }
                        break;
                case '3':
                        {
                                head=insert(head);                           //增加
                                print(head);
                        }
                        break;
                case '4':
                        return head;
                default:
                        printf("操作错误,此项不存在!\n");
                        break;
                }
                if(strcmp(num,"6")==0)
                        break;
        }
        return head;
}






//主函数
void main()
{
        struct address_list *head=NULL;
        char num;
        printf("\t\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");
        printf("\t\t\t*=*               通讯录                  *=*\n");
        printf("\t\t\t*=*    请及时保存创建完毕的通讯录内容!    *=*\n");
        printf("\t\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");
        while(1)
        {
                printf("\t\t\t*********************************************\n");
                printf("\t\t\t***   1 创建通讯录                     ****\n");
                printf("\t\t\t***   2 按名字排序                     ****\n");
                printf("\t\t\t***   3 综合操作                     ****\n");
                printf("\t\t\t***   4 保存通讯录                     ****\n");
                printf("\t\t\t***   5 打开通讯录                     ****\n");
                printf("\t\t\t***   6 删除                           ****\n");
                printf("\t\t\t***   7 退出                           ****\n");
                printf("\t\t\t*********************************************\n");
                printf("请输入您选择的操作:");
                gets(num);
                switch(*num)
                {
                case '1':
                        {
                                if(head==NULL)
                                {
                                        head=creat();                              //创建
                                        print(head);
                                }
                                else
                                {
                                        head=shifang(head);
                                        head=creat();                              //重新创建
                                        print(head);
                                }
                        }
                        break;
                case '2':
                        {
                                head=paixu(head);                               //排序
                        }
                        break;
                case '3':
                        {
                                head=menu(head);                              //综合操作
                        }
                        break;
                case '4':
                        {
                                save(head);                                 //文件保存
                                print(head);
                        }
                        break;
                case '5':
                        {
                                head=load(head);                              //文件输出
                        }
                        break;
                case '6':
                        {
                                head=delete_txl(head);                           //删除
                                print(head);
                        }
                        break;
                case '7':
                        head=shifang(head);
                        break;
                default:
                        printf("操作错误,此项不存在!\n");
                        break;
                }
                if(strcmp(num,"7")==0)
                        break;
        }
}

~风介~ 发表于 2015-12-28 20:49:34

这样的软件能卖不少钱吧~{:7_140:}

阴影中的曙光 发表于 2015-12-28 22:03:27

看样子是作业。。。这玩意可不是一两行代码的事 啊

苦哈哈 发表于 2015-12-29 10:27:10

来看看

ravenhu13 发表于 2015-12-29 10:58:48

真需要做的话可以联系。

atmo 发表于 2015-12-29 16:07:02

有钱,还是可以的。

zlh 发表于 2015-12-30 18:32:19

用我写的学生管理系统,稍稍修改一下就可以用了
学生成绩统计程序2.0

babyrui 发表于 2016-1-11 15:55:35

当时毕业设计好想就是这种的要求不过是用vb写的 可以的传给你 希望对你有帮助
页: [1]
查看完整版本: 求大神帮帮忙