2015年6月28日 课设日志

放松了一天,毕竟周末,然后,现在是1851,准备开始今天的课设,然而,我却不知道被安排了什么任务,所以,还是自己找个任务吧。因为现在只有演出厅的模块,所以,还就挑个吧,我先看看去。

嗯,找到了,那就写演出厅的删除吧。现在很明确了:

开始,第一步:界面层

int Studio_UI_Delete()

{

        int rtn=0;

        int ID;

        printf("Input the studio's ID to delete : \n");

        scanf("%d",&ID);

 

        if ( Studio_Srv_DeleteByID(ID)==1 )

        {

                printf("Delete succeed!\n");

                rtn=1;

                Seat_Srv_DeleteALLByRoomID();

                return rtn;

        }

        else

                printf("Delete fail!\n");

}

看吧,现在是1905,写的还是比较快的,毕竟有流程,毕竟有想法了,定义,调用函数,就是这样

嗯,下一步,业务逻辑层了:

inline int Studio_Srv_DeleteByID(int ID)

{

        if ( Studio_Perst_DeleteByID(ID)==1 )

                return 1;

}

 

越写越觉得业务逻辑还是最好写的,就要和写持久化层的交流好调用函数的返回值,可惜我不是组长。不过,现在我们都是每个人写一个模块,而不是写一个层次。

下来,那就是持久化层了,挑战来了:

int Studio_Perst_DeleteByID(int ID)

{

        int found=0;

        int i;

        studio_node_t buf;  //临时放入的结构体

        rename(STUDIO_DATA_FILE,STUDIO_DATA_TEMP_FILE); 

        FILE *fp,*tp;

        tp=fopen("STUDIO_DATA_TEMP_FILE","rb")

        fp=fopen("STUDIO_DATA_FILE","wb");

        fread(buf,sizeof(studio_t),newCount,tp);

        for (i=0;i<newCount;i++)

        {

                if ( buf.data.id!=ID && !feof(fp) )

                {       found=1;

                        fwrite(tp,sizeof(studio_t),newCount,fp);

                }

        }

        fclose(tp);

        fclose(fp);

        if ( remove(STUDIO_DATA_TEMP_FILE)==1 )

                return found;

}

持久化层还是说说,不然本来在vim里我没汉语也就没有注释,就在这里说说吧,编写流程也是按模块来得,定义返回值变量,用到了文件的重命名,get1,然后又是关于文件的,rbwb,我的理解就是,把fp里的文件内容读出,然后读入到临时的tp里,fp为空,为的是存入之后放进的一个一个演出厅内容,然后用到了freadfwrite,也是对着课本P272来得,fread()里的意思就是,把tp里的长度为一个studio_node_t长度(突然发现问题了,应该是这个啊!),一次又一次的读出来,读在buf这个结构体上,newCount就是读多少次,然后,用一个for语句循环,读了多少次,根据是否和ID相同以及到文件结尾,写入fwrite()用这,写入fp(最后有fw详解)。if条件也就是按模块来得,最后关闭两个文件,并且如果删除临时文件tp成功,那就返回found,结束。

 

    以下是今天要用的时候,网上百度或者看书的:

Get1:文件的重命名:

<stdio.h>包里有两个函数可以满足你的要求:注意,这两个函数操作的文件必须要关闭,否则会执行失败,如果失败,执行完成后可以通过比较errno的值来确定失败原因.重命名:int rename(const char *oldname, const char *newname);参数解释:oldname:原文件名newname:新文件名(可以指定全局路径来移动文件)返回值:0:成功-1:失败,并将全局变量errno置为错误

Get2文件删除:
函数名: remove 
功  能: 删除一个文件 
用  法: int remove(char *filename); 

【返回值】成功则返回0,失败则返回-1,错误原因存于errno

Get3:fread和fwrite

其实现在在网上在搜的看了下,

fwritefread是以记录为单位的I/O函数,freadfwrite函数一般用于二进制文件的输入输出。

[cpp] view plaincopyprint?

1. #include <stdio.h>  

2. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);  

3. size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);  


返回值:读或写的记录数,成功时返回的记录数等于nmemb,出错或读到文件末尾时返回的记录
数小于nmemb,也可能返回0

    freadfwrite用于读写记录,这里的记录是指一串固定长度的字节,比如一个int、一个结构体或者一个定长数组。参数size指出一条记录的长度,而nmemb指出要读或写多少条记录,这些记录在ptr所指的内存空间中连续存放,共占size * nmemb个字节,fread从文件stream中读出size * nmemb个字节保存到ptr中,而fwriteptr中的size * nmemb个字节写到文件stream中。

    nmemb是请求读或写的记录数,freadfwrite返回的记录数有可能小于nmemb指定的记录数。例如当前读写位置距文件末尾只有一条记录的长度,调用fread时指定nmemb2,则返回值为1。如果当前读写位置已经在文件末尾了,或者读文件时出错了,则fread返回0。如果写文件时出错了,则fwrite的返回值小于nmemb指定的值。下面的例子由两个程序组成,一个程序把结构体保存到文件中,另一个程序和从文件中读出结构体。详见博客:http://blog.csdn.net/sky_qing/article/details/12783045

 

最后,总结下今天的任务,先说课设,那个演出厅链表结构体,才是每个函数里要用的,也就是Studio_node_t xxxxx,都要是这个样子,然后,今天主要还是需要文件读写,课设里的删除文件用到了文件,哦哦哦哦,现在才瞬间明白,为什么博哥说这要求真多,我现在才,哦不,刚才意识到是用文件删除。其实文件还是要好好下去看看,本来学的就不是很多,好吧,做自己。

现在回顾今天的这课设,才发现自己把时间概念都忘了加,现在是23:16,哈哈


刚才在宿舍是说了些,关于课设比较沉重的话题,最后课设能过不过,每个人怎样才能算过,其实,本来觉得是不想说的,知道这个世界是不公平。但是,又感觉,既然我现在在做这么多,在付出这么多,为什么不自信点,不争取一下呢?现在我是这样想的,而且呢,就因为刚才说的那些话,以上的课设日志能提高很多,毕竟是说过的话,或多或少会对自己有些鞭策,不纸上谈兵,不做纸老虎。


就当一切都是锻炼。

你可能感兴趣的:(工作,一周)