最近总算把期末考试给处理完了,在暑期再也没有课业压力的烦恼了
总算又可以开心的撸码了!
既然之前的一段时间都在忙课程设计,那今天就说说课程设计的事吧!
C语言课程设计的内容
C语言课程设计是我们计科专业在学期底需要进行的,
其主要内容是设计一个信息的处理系统,
主要实现的功能是:文件读取信息->程序处理信息->文件保存信息
下面我就功能部分进行说明:
1.文件的读取和保存
此部分主要的内容是文件部分的操作,
其中包括文件的打开与关闭,文件的读写操作,文件的关闭,以及一些文件指针的移动操作
只要熟练掌握了文件部分的知识,这一部分的功能实现,还是比较容易的了
2.程序处理信息
在这个课程设计中,对于信息的处理方式,要求是使用链表的方法
但是还是有同学使用,结构数组,这个就不太恰当了
相对于结构数组,链表还是有很大的优点的:
一,使用链表其中所存储的数据不是连续的,当程序不能一次性的处理所有的信息时,使用链表方便
二,从第一点继续往后谈,链表存储数据属于按需存取,分配内存空间,不会浪费内存空间
三,使用链表,之后对于信息的增,删,改,查,十分方便
以上两部分即为此项课程设计实现必要功能时的知识储备
接下来,我来分享我自己在课程设计中的经验
1.关于模块化函数设计的编程思想
模块化的编程思想是我在此次课程设计中感受最深的东西!
进行编程时,建议尽可能多的使用函数,并且将函数模块化.说实在的这样看上去,
程序的代码,美观,条理清晰
因为进行课程设计时,是多个班的同学一起在机房里进行的,有的同学程序有问题,在帮忙进行改Bug时
我发现了这样的问题,在改代码时,没有模块化的程序设计思想,整个程序杂乱无章,没有条理
不说函数原型,函数声明也没有…程序的可读性较低,
而且,更恶心的事是,不使用函数原型,你的函数顺序需要十分注意,否则,进行函数的相互调用时,就会报错!
下面我贴一张我的函数原型的图,这样的话条理清晰,而且可移植性高 _ _ _ 2.关于使用google新闻组的便利之处
在进行文件读写时可以使用以下代码判断是否文件结束:
fp = fopen("/home/Evilcrow/C/information","r+");
if(fp != NULL)
{
printf("Error!");
return NULL;
}
while(!feof(fp))
{
...........(省略)
}
通过上面的代码即可使程序在遇到文件尾以前,循环读出/写入信息
那么,问题来了,要是文件为空文件,程序还能正常运行吗?
答案,是否定的!
while(!feof(fp))
对于文件开头要是为空时无法处理的,会进入死循环
遇到这个问题,我思考了很久,没有找到合适的方法,最后还是去了小组的google新闻组上才找到了解答
最后,我自己也进行了尝试
但是,我也发现了一个问题,就是在fgtc进行首字符是否为空的判断之后,会私自吞掉一个字符
这样,每次进行操作完成之后,都会少一个字符,最后,我找到了fseek函数,对代码进行了以下修改:
if(fgetc(fp) == EOF)
{
printf("\t\t\t\tThe file is empty!\n");
return pHead;
}
fseek(fp,0L,0);
while(!feof(fp))
{
...........(省略)
}
进行这样的修改之后,便可以很顺畅的进行文件开头是否为空的判断了.
在这一过程中,收获到的不仅仅是这样的一个小技巧,灵活使用,善于使用google新闻组,真的很方便
不仅可以解决自己的问题,以前的前辈所留下的宝贵经验,也可以进行学习!
3.关于链表的操作
之前提到在整个课程设计中,链表的操作至关重要!
我之前一直以来创建的都是无头节点链表,之后在进行链表的操作时,十分困难
于是,听从恒毅哥的指导 @Hg_yi 使用了有头节点链表,之后的增,删,改,查,排序操作十分方便
使用有头节点的链表,头节点始终是不参与存储数据的,尤其是排序,很方便
此篇Blog重点是课设经验的总结,下次有机会总结一篇链表操作
4.Win与Linux下的一些区别
-
关于system函数的问题
-
关于密码回显的问题
-
getchar( )与system(“pause”)
system函数在Win下与Linux下有很大的区别
但是,在Linux下可以通过其他的方式来实现Win下各式各样的system函数
比如:getchar( )可以实现system(“pause”)的进程中止功能
密码的回显在Win下是依靠< conio.h >中的getch()函数实现不回显的功能的
在Linux下,则没有此函数头文件,需要依靠system(“stty (-)echo”)来实现输入的回显功能. _ _ _
以上即为,目前我自己所总结的经验,要是大家认为哪里不对,可随时留言联系我.