您的位置:首页 > 其它

2015年6月28日 课设日志

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

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

开始,第一步:界面层

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");

}

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

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

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,然后又是关于文件的,rb,wb,我的理解就是,把fp里的文件内容读出,然后读入到临时的tp里,fp为空,为的是存入之后放进的一个一个演出厅内容,然后用到了fread和fwrite,也是对着课本P272来得,fread()里的意思就是,把tp里的长度为一个studio_node_t长度(突然发现问题了,应该是这个啊!),一次又一次的读出来,读在buf这个结构体上,newCount就是读多少次,然后,用一个for语句循环,读了多少次,根据是否和ID相同以及到文件结尾,写入fwrite()用这,写入fp(最后有f和w详解)。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

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

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

[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。

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

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

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

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

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

就当一切都是锻炼。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: