| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 626 人关注过本帖, 1 人收藏
标题:哪位大虾帮帮忙?明天要答辩了,帮我解读下、
只看楼主 加入收藏
lap215266131
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-4-7
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:11 
哪位大虾帮帮忙?明天要答辩了,帮我解读下、
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct stu
{
    int number;
    char name[20];
    int age;
    char sex[10];
    struct stu *next;
};

FILE *fp = NULL;
struct stu *Filetostr()//------------------------不懂
{
    struct stu *pf=NULL,*pb=NULL,*head=NULL,*p=NULL;
    if( (fp=fopen("student.txt","r")) == NULL )
    {
        printf("文件之前不存在!\n");
        return NULL;
    }
    pb=(struct stu *)malloc(sizeof(struct stu));//---------------------不懂
    head=pb;
    while(1)
    {
        pf=(struct stu *)malloc(sizeof(struct stu));//--------------------不懂
        if( fread(pf,sizeof(struct stu),1,fp) )
        {
            pb->number = pf->number;
            strcpy(pb->name, pf->name);
            pb->age = pf->age;
            strcpy(pb->sex, pf->sex);
            pb->next=(struct stu *)malloc(sizeof(struct stu));//---------------------不懂
            p=pb;
            pb=pb->next;
               
            free(pf);
        }
        else
        {
            p->next=NULL;
            free(pb);
            break;
        }
    }
    //pb=NULL;
    fclose(fp);
    return head;
}

void Strtofile(struct stu *head)//-----------------不懂
{   
    if( !head )
        return;
    struct stu *pb=NULL;
    pb=head;
    if((fp=fopen("student.txt","w"))==NULL)
    {
        printf("无法打开文件!\n");
        exit(-1);
    }
    while(pb)
    {
        fwrite(pb,sizeof(struct stu),1,fp);
        pb=pb->next;
    }
   
    fclose(fp);
    printf("保存成功!\n");
}

// 添加模块
struct stu *Add(struct stu *head)
{
    struct stu *pf=NULL,*pb=NULL,*p=NULL;
    int num;   
    printf("请输入学生信息\n");
    printf("请输入学生的学号:");
    scanf("%d",&num);
    pf = head;
    //设计应该是插入的时候就依照学号的从小到大来进行排序的
    if(head!=NULL)//不是第一次的插入新的元素
    {
        pb = (struct stu *)malloc(sizeof(struct stu));//-----------------不懂
        /*while( (pf->number<num) && (pf->next!=NULL) )如果只有一个结点的情况下
        即使前面的条件成立 后面的也不成立 总的是不成立的 就不能达到目的
        {
            p=pf;
            pf=pf->next;
        }*/
        while( pf &&  (pf->number<num))//表示过滤掉比这个学号小的人
        {
            p = pf;//p 指向的是比num 小的学号 或 NULL
            pf = pf->next;
        }//pf 出来指向的是不比num小的学号的结点 或 最后一个结点
        if(pf->number==num)//pf当前指向相等的情况
        {
            printf("你要添加的学生之前已经存在!\n");
            return head;
        }
        else if(pf->number>num)//pf当前指向大于num的情况
        {
            if(head==pf)//第一个结点就大于num
            {
                /*head=pb;
                pb->next=pf;*/
                pb->next = head;
                head = pb;//保证head总是指向第一个结点
            }
            else
            {
                p->next = pb;
                pb->next = pf;
            }
        }
        else if( pf == NULL )//pf当前指向最后一个结点
        {
            /*pf->next = pb;
            pb->next=NULL;*/
            pb->next = pf;
            pf = pb;
        }     
            //pb=(struct stu *)malloc(sizeof(struct stu));
    }
    else//第一次的插入
    {
        pb = (struct stu *)malloc(sizeof(struct stu));
        head = pb;
        pb->next = NULL;//进行未结点的处理
    }
    pb->number=num;
    printf("请输入学生的姓名:");
    scanf("%s",pb->name);
    printf("请输入学生的年龄:");
    scanf("%d",&pb->age);
    printf("请输入学生的性别(\"man\"表示男性, \"woman\"表示女性):");
    scanf("%s",pb->sex);
    printf("添加成功!\n");
    return head;
}
//查找模块
struct stu *Choose(struct stu *head)
{
   //加判断语句
    if( !head )
    {
        printf("未存有学生信息!\n");
        return NULL;
    }
    struct stu *pb=NULL;
    int num;
    printf("请输入你要查找的学生的学号:");
    scanf("%d",&num);
    pb = head;
    while( (pb->number!=num) && (pb->next!=NULL) )
    {
        
            pb = pb->next;
    }
    if(pb->number==num)
        return pb;
    else
        if( (pb->number!=num) && (pb->next==NULL) )
        printf("你要查找的学生不存在!\n");
    return NULL;
}
//删除模块
struct stu *Delete(struct stu *head)
{
    //加判断语句
    if( !head )
    {
        printf("未存有学生信息!\n");
        return NULL;
    }
    struct stu *pb=NULL,*pf=NULL;
    int num;
    printf("请输入你要删除的学生的学号:");
    scanf("%d",&num);
    pb=head;
    /*while( (pb->number!=num) && (pb->next!=NULL) )
    {
        pf=pb;
        pb=pb->next;
    }*/
    while( pb && (pb->number!=num) )//可以一直找到最后一个结点即 可以全部察寻一遍
    {
        pf = pb;
        pb = pb->next;
    }//假如找到 则pb就是要删除的 或则 就没有找到
    //if(pb->number==num)
    if( pb )//表示pb不为NULL 即 查询到了
    {
        if(pb==head)//第一个结点就找到
            head = pb->next;
        else
            pf->next = pb->next;
            //pf->next = pb->next;
        free(pb);
        printf("d删除成功!\n");
        return head;
    }
    else
        printf("你要删除的学生不存在!\n");
    return head;
}

struct stu *Update(struct stu *head)
{
    //加判断语句
    if( !head )
    {
        printf("未存有学生信息!\n");
        return NULL;
    }
    struct stu *pb=NULL;
    int num;
    printf("请输入你要更改的学生的学号:");
    scanf("%d",&num);
    pb=head;
    /*while((pb->number!=num)&&(pb->next!=NULL))
        pb=pb->next;*/
    while( pb && (pb->number!=num) )//如果pb非NULL 指向要修改的结点
        pb=pb->next;
    if( pb )
    {
        printf("请输入你要更改的学生的姓名:");
        scanf("%s",pb->name);
        printf("请输入修改后的学生的年龄:");
        scanf("%d",&pb->age);
        printf("请输入修改后的学生的性别(“man”表示男性,“woman”表示女性):");   
        scanf("%s",pb->sex);
        printf("更改成功!\n");
        return head;
    }
    else
        printf("你要修改的学生不存在!\n");
    return head;
}

void Print(struct stu *head)
{
    struct stu *pb=NULL;
    pb=head;
    while( pb )
    {
        printf("学号:%d    姓名:%s    年龄:%d    性别:%s\n",pb->number,pb->name,pb->age,pb->sex);
        pb = pb->next;
    }
}

void Window()
{
    printf("--------------------------------------------------------------------------------\n");
    printf("|******************************************************************************|\n");
    printf("|*************************10计科4学生信息管理系统******************************|\n");
    printf("|******************************************************************************|\n");
    printf("--------------------------------------------------------------------------------\n");
    printf("\n\n");
    printf("        1.添加学生信息\n");
    printf("        2.查找学生信息\n");
    printf("        3.删除学生信息\n");
    printf("        4.修改学生信息\n");
    printf("        5.显示学生信息\n");
   
    printf("        6.退出!\n");
    printf("\n\n");
}
   
int main()
{
    struct stu *head=NULL, *search_head=NULL;
    int ask;
    int saveask;
    int addask;
    printf("欢迎进入学生信息管理系统...\n");
    head = Filetostr();
    while(1)
    {
        Window();
        printf("请进行选择:");
        scanf("%d",&ask);
        switch(ask)
        {
        case 1:
            head = Add(head);
            while(1)
            {
                printf("是否继续进行添加(0表示继续,其他数字表示离开):");
                scanf("%d",&addask);
                if(addask)
                    break;
                head=Add(head);
            }
            break;
        case 2:
            search_head=Choose(head);
            if(search_head!=NULL)
                printf("学号:%d      姓名:%s   年龄:%d   性别:%s\n",search_head->number,search_head->name,search_head->age,search_head->sex);
            break;
        case 3:
            head=Delete(head);
            break;
        case 4:
            head=Update(head);
            break;
        case 5:
            Print(head);
            break;
        case 6:
            printf("****是否要进行保存:****\n\n");
            printf("输入0表示不进行保存退出,其他数字表示进行保存并退出:");
            scanf("%d",&saveask);
            if(saveask)
                Strtofile(head);
            exit(0);                  
        default:
                exit(-1);
        }            
    }
    return 0;
}
搜索更多相关主题的帖子: return 
2011-04-17 12:49
lap215266131
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-4-7
收藏
得分:0 
哪位大虾帮帮忙啊、、、、
2011-04-17 12:54
张春平
Rank: 3Rank: 3
来 自:北城
等 级:论坛游侠
帖 子:48
专家分:124
注 册:2010-12-2
收藏
得分:3 
struct stu *Filetostr()//------------------------不懂//这是返回一个类型为struct stu的这指针函数,你只要说它返回的是一个类型为struct stu类型的地址就行了。pb=(struct stu *)malloc(sizeof(struct stu));//---------------------不懂、//这是动态的创建一个空间pb,由于malloc函数返回的只是一个空类型,因此要强制转换成struct stu *类型,sizeof(struct)是所开辟的空间的大小。
void Strtofile(struct stu *head)//-----------------不懂//把一个链表的头指针传入这个函数,判断这个链表是否为空,如果为空就向student.text文件中写入,反之,就退出这个函数了。


2011-04-17 13:12
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:3 
以下是引用张春平在2011-4-17 13:12:30的发言:

[struct stu *Filetostr()//------------------------不懂//这是返回一个类型为struct stu的这指针函数,你只要说它返回的是一个类型为struct stu类型的地址就行了。pb=(struct stu *)malloc(sizeof(struct stu));//---------------------不懂、//这是动态的创建一个空间pb,由于malloc函数返回的只是一个空类型,因此要强制转换成struct stu *类型,sizeof(struct)是所开辟的空间的大小。
void Strtofile(struct stu *head)//-----------------不懂//把一个链表的头指针传入这个函数,判断这个链表是否为空,如果为空就向student.text文件中写入,反之,就退出这个函数了。


应该是如果不为空,则将指针 head 所知想的量表中每个元素的各个成员写入文件,否则函数返回。
这个。。。解答问题要认真阿
2011-04-17 14:08
lap215266131
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-4-7
收藏
得分:0 
回复 3楼 张春平
问题1
为什么在添加的时候会出现不能添加第二个学生?一旦添加就显示不能进行了,如果可以添加第二个那在显示的时候就会无止尽的循环 能QQ语音交流吗???急求啊!!
2011-04-17 14:30
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:3 
这样的程序几乎每个学校都作为毕业设计的题目吧??这样的答辩又有什么用呢?

愿用余生致力编程
2011-04-17 15:20
flylee
Rank: 5Rank: 5
等 级:职业侠客
帖 子:309
专家分:374
注 册:2004-8-10
收藏
得分:3 
以下是引用我菜119在2011-4-17 15:20:28的发言:

这样的程序几乎每个学校都作为毕业设计的题目吧??这样的答辩又有什么用呢?


我觉得这种题目离毕设的水平还差的很远
2011-04-17 15:35
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
呵呵!通过这个就可以判断一个学校的水平,一看就是一个二流的学校!!

但是我们却不能够这样去说这个二流学校的学生一定都是二流的呀!

愿用余生致力编程
2011-04-17 15:43
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
楼主别着急,我带回要去配眼镜,隐形丢了一片,现在是独眼龙一般
等我回来给你详细的分析一下,你晚上再看回帖就是了

不过嘛,还是应该认真学习滴,楼主要做好自我反省

[ 本帖最后由 voidx 于 2011-4-17 15:48 编辑 ]
2011-04-17 15:47
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:3 
代码长,不想看,就算看懂了,也要码很多字来帮你解答……

唉,你这程序如果是别人帮你写的,那你找哪个写程序的人吧
如果是直接copy的,那……

看得出来,你们的老师还是比较宽容的。放心,能过的。

o(∩∩)Linux & Python 群:187367181
2011-04-17 17:33
快速回复:哪位大虾帮帮忙?明天要答辩了,帮我解读下、
数据加载中...
 
   



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

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