美文网首页
C语言课程设计

C语言课程设计

作者: hjGamma | 来源:发表于2018-11-28 21:39 被阅读0次

    经过几个星期的努力,通过对c语言的学习,终于将课程设计完成。这中间也少不了前辈和百度的指导 

    写课程设计初,我当然也是一筹莫展,没有一丢丢思路。但是嘞,我经过看前辈写的代码和百度,知道了大概的思路于是开始了我的课程设计

    首先我先是由简入蘩,先把牌面写出来了(23333,难得实在麻烦,还有个爱心呦),首先要把每一项功能构思好,到后来再补充。基本的主线思路要有。

    这个应该是最简单的过程了不多说 开始下一项

    目录出来了,下面把选择写出来

    简单的选择功能,当你输入的数不在菜单内是将会提示出错,用do while 进行,然后主体就是switch-case 将选择程序写了出来,这样就有了一个顺序,于是我开始一个一个功能向下进行。

    接下来我将最重要的结构体打了出来,由于我写的是学生信息管理系统,因此也就没有什么求平均分了,但是排序还是要考察的,结构体中应注意这些字符串当信息进行传递时用的是=还是strcpy,向其中传入信息又应该怎么传,这个就不用多说了

    接下来就是建立动态链表,我基本是根据书的内容,进行改动,搬过来的(首先还是要理解的),书上的方法也是构建动态链表的基本套路。先建立一个空间来存储信息,让开辟的空间等于你需要的空间,然后将表头带着其后的数据输入。在结束时应输入0.当然这里面也有许多可以节省的方法比如在输入信息时,完全可以再构建一个函数,因为在还未出现的各种功能中,大多数需要输入信息,我这个也是我的初代版本,有很多地方可以简化。通过malloc创建一个空间,比较基础的构建链表的方式。

    通过这个函数已经足够将信息输入了。

    下面的操作修改学生信息 首先按照学号查找信息,链表是一串信息,我通过查找表头即可获得接下来的一系列信息。

    删除 先通过表头查询相应的数据,通过free函数释放空间

    刚开始在写查找程序的时候,无意中把内容会删掉。后来虽然是试出来的哪里错了

    但是也发现了不足。通过调出表头,将后面的内容调出

    简书写完总感觉少了什么,才发现排序这个过程居然忘打上去了,。

    我用的排序方法思路比较清楚,先将第一个当做最小的,然后通过for循环的嵌套进行比较和更换注意字符串的copy不是=。可以说这个方法是简单粗暴。

    增添,我这个与1过程相似,基本是相同的思路。

    存于文件,fwrite为二进制存取 在记事本中会出现乱码的情况,可通过使用fprinft。

    里面有一个过程是比较常见的了 for循环 从表头开始将后面的内容存入文件

    这个功能是后来补加的找学长验课程设计的时候,学长给出的一些建议,将内容存于文件的目的就是为了读取,因此后来将这个功能也是补了出来
    void duqu(struct student *head)

    {

        struct student *pt,*p1;

        FILE *fp;

        head=NULL;

        p1=pt=(struct student*)malloc(sizeof(struct student));

        if((fp=fopen("C:\\informatin.txt","rb"))==NULL)

        {

            printf("打开文件失败\n");

            return;

        }

        while(!feof(fp))

        {

            if(fread(pt,sizeof(struct student),1,fp)!=1)

            {

                free(pt);

                break;

            }

            else

            {

                printf("\t学号为:%d\n",p1->num );

    printf("\t姓名为:%s\n",p1->name );

                printf("专业:%s\n",p1->specialty);

                printf("生日: %d\n",p1->birthday);

                printf("住址: %s\n",p1->address);

                printf("成绩: %d\n",p1->score);

            }

            if(head==NULL)

            {

                head=pt;

            }

            else{

                p1->next=pt;

            }

            p1=pt;

            pt=(struct student*)malloc(sizeof(struct student));

        }

        pt=NULL;

        free(pt);

        fclose(fp);

    }

    课程设计中的一些问题

    一.出现 error:conflicting types for XXX

    原因一:

    原来是因为没有先做函数声明,而函数位于main()之后。

    在main函数前声明了函数原型后,一切ok.

    原因二:

    头文件的被循环引用,在引用时考虑清楚包含顺序

    原因三:

    头文件声明和定义参数稍有不同

    最终我将结构体至之前的目录 等等全部移到最后 使问题解决

    二. 'p1' undeclared (first use in this function)|

    “p1”未声明(在这个函数中首次使用)

    p1在使用时发现看似相同实际不一样

    我通过将首个p1为标准 后面通过复制粘贴替换 使问题解决

    关于课程设计中的赋值

    三       今天在写课程设计的修改这一环节中出现了error: assignment to expression with array type,出现了这样一种复制错误,原因是因为,在给字符串赋值时使用“=”进行赋值。

            于是我总结了字符串赋值的方法

    1. 字符串数组不能用"="直接赋值, 即s="Good News!"是不合法的。所以应分 

    清字符串数组和字符串指针的不同赋值方法。 

    2. 对于长字符串, Turbo C2.0同意使用下述方法: 

    比如: 

    main() 

    char s[100]; 

    strcpy(s, "The writer would like to thank you for" 

    "your interest in his book. He hopes you" 

    "can get some helps from the book."); 

    3.指针数组赋值

    比如: 

    main() 

    char *f[2]; 

    int *a[2]; 

    f[0]="thank you"; /*给字符型数组指针变量赋值*/ 

    f[1]="Good Morning"; 

    *a[0]=1, *a[1]=-11; /*给整型数数组指针变量赋值*/ 

    4.不管是静态,局部还是全局数组仅仅有在定义时才干初始话,否则必须通过其他方法,比方循环操作实现。

    不论什么

    int a[3];

    static int b[3];

    a[3] = {1, 2, 3};

    b[3] = {1, 2, 3};

    没有在定义时初始化都是错误的!

    相关文章

      网友评论

          本文标题:C语言课程设计

          本文链接:https://www.haomeiwen.com/subject/ghanqqtx.html