一大早,带着不一样的心情进入机房,今天把电脑也带着,毕竟还是有用的。嗯,那今天的任务呢,大体分俩个,继续完成一个任务,和对已经完成的任务进行验证。老师现在还在查人。
然而,现在组长才布置任务,而且,应该是前几天的任务,是以层次模块,每个人开始写。
软件的分析设计,舒老师现在在讲的内容,课设的目的就是想提高大家的编程目的,早早积累项目经验。
和以往的不同,不要小看,按工程设计要求。老师说,我们这届在学校做项目是很难得的。
现在开始讲课设的流程。
老师说,现在自己做的东西,自己保留,自己分享。//老师有时说的听不懂啊,现在在说销售统计模块。
设计思路讲完了,现在开始讲三个层次了。
其实现在讲的,就是我这几天自己学到的,自己经历之后,再听到底是怎么回事,感觉不错。自己吃饭,和别人给你喂饭,感觉真的不一样耶。进步。
老师讲了半天的链表,感觉好厉害︿( ̄︶ ̄)︽( ̄︶ ̄)︿
最后讲分页了,要听的很认真的样子,突然觉得我还是很聪明的。
现在是10:46,老师在10多分钟前已经讲完了,那些老师准备好的文件需要都集中到一起,认真分析。
然后,此刻的工作任务,是:
现在是11:30,过去的这些时间,在组长的具体安排下,大家的任务终于分好了,组长负责界面层,副组长负责持久化层,我和其他四个人负责业务逻辑,我刚才小小充当了下领导的感觉,还不错。
然后,我的任务终于清楚了:
用户业务逻辑层
订单信息逻辑层
然后,因为现在,老师终于又领悟了,然后给大家发了各个模块,大家只需要往进写东西就好了,所以,go go go 一切都正式开始了。
现在是12:04,激动之后是淡定,是有模块了,但是没有流程,老师才发了座位的整体设计。我再看看,自己想。
还是学习学习再学习吧:
Get1:判断一个链表是否为空
由头结点的指针部分是否为空来判断,如果为空,则链表为空
下班,睡了个午觉,才起来,准备了一下,开始工作。然后呢,因为我要写的还没有计划说,就手头现在有的,我决定准备写一下:
演出计划的持久层
现在是,15:25,马上开工。
现在是16:35,实习报告出了点问题,修改了20多分钟,然后,以下是刚才的:
int Schedule_Perst_SelectByPlay(schedule_list_t list, int play_id){
int l=0;
FILE *fp;
schedule_list_t temp;
fp=fopen("SCHEDULE_DATA_FILE","rb");
if (fp==NULL)
{
printf("Open fail!\n");
return 0;
}
while ( !feof(fp) )
{
fread(temp,sizeof(schedule_list_t),1,fp)
if ( temp->data.play_id == play_id )
{
List_init(list,schedule_list_t);
List_AddTail(list,temp);
l++;
}
}
fclose(fp);
return l;
}
这是根据剧目ID从文件中载入所有演出计划,while里的东西搞了大半天,一开始不知道如何将读出的数据放入链表。。。。。。然后然后,幸好早上也听老师了些话,找了半天辅助资料,链表的函数就是直接用的,init初始化下,然后调用AddTail直接使用就好,把temp数据放入链表list。
嗯,这个就这样了,然后,演出计划还有5个持久化层,继续下一个。
现在是17:09,结果刚才到现在,都在帮舍友解决问题,关于链表的,
现在是19:49,以下是关于添加演出计划的:
int Schedule_Perst_Insert(const schedule_t *data)
{
FILE *fp;
int rtn=0;
fp=fopen("SCHEDULE_DATA_FILE","ab");
if (fp==NULL)
{
printf("Open fail!\n");
return 0;
}
rtn=fwrite(data,sizeof(schedule_t),1,fp);
fclose(fp);
return rtn;
}
有流程,自己动手编写还是方便多了,不知道这真的是以后工作的简单写照吗?说说代码:以ab方式打开SCHEDULE_DATA_FILE,失败提示现在是必不可少的。然后,用fwrite写入一条演出计划信息,返回值就是1,关闭文件。以上都是按流程图来的,真的是老师今天早上说的,只是锻炼我们的编程能力而已。
现在是22:58,反正一直都忙忙碌碌的到现在,开始,最后在来一个小时多,就收工了。
这个现在是演出计划更新函数:
int Schedule_Perst_Update(const schedule_t *data){
FILE *fp;
schedule_t buf;
int found=0;
fp=fopen("SCHEDULE_DATA_FILE","rb+");
if (fp==NULL)
{
printf("Open fail!\n");
return 0;
}
while ( !feof(fp) && fread(buf,sizeof(schedule_t),1,fp) && buf.id==data.id )
{
fseek(fp,-sizeof(schedule_t)L,SEEK_CUR);
printf("The infomation : \n");
scanf("%d%d%d%d%d%d",&data.id,&data.play_id,&data.studio_id,&data.data_tdata,&data.mytime_ttime,&data.seat_count);
fprintf(fp,"%d%d%d%d%d%d",data.id,data.play_id,data.studio_id,data.data_tdata,data.mytime_ttime,data.seat_count);
found=1;
}
fclose(fp);
return found;
}
其实吧,这个没有太搞明白。。。不过,回头看了看计划的业务逻辑层,貌似明白了怎么回事,也就是开始也想的,就是不管你是增添修改删除,各个完成之后之后,就调用这个函数进行更新一次,保证文件的及时性。但,又有,它流程里,说,向文件中写入要修改的剧目记录。明明是更新,为什么要修改?修改什么?好吧,这是今天,也是最近遇到的第一个问题。
继续。
这个现在是演出计划的删除:
int Schedule_Perst_DeleteByID(int ID){
FILE *fp;
FILE *tp;
Int found;
schedule_t buf;
if ( rename(SCHEDULE_DATA_FILE,SCHEDULE_DATA_TEMP_FILE)!=0 )
{
printf("Change name fail!\n");
return 0;
}
tp=fopen("SCHEDULE_DATA_TEMP_FILE","rb");
fp=fopen("SCHEDULE_DATA_FILE","wb");
if (fp==NULL && tp==NULL )
{
printf("FILE fail!\n");
return 0;
}
while ( !feof(tp) )
{
if ( fread(buf,sizeof(schedule),1,tp) && buf.id==ID )
found=1;
fwrite(buf,sizeof(schedule),1,fp);
}
fclose(tp);
fclose(fp);
if ( remove(STUDIO_DATA_TEMP_FILE)==1 )
return found;
}
其实,真的是深深体会到,大部分模块都是相同的,流程都是一样的,刚才还在傻傻的找昨天写的日志,比如找重命名rename,fread,fwrit都是一个想法,复制粘贴昨天的代码。说收获,文件中的删除,就是将文件中的数据调出来到临时文件中,然后和需要删除的比较,不一样的,再次放入文件就好。最后删的,怎么删?就是临时文件里剩的是需要删除的,所以最后才有一步删除临时文件remove()。
下面这个是今天的倒数第二个了!!
功能就是:按照ID从文件中查询演出计划数据,并将其保存到buf所指的内存单元中。
int Schedule_Perst_SelectByID(int ID, schedule_t *buf){
FILE *fp;
int found=0;
schedule_t data;
fp=fopen("SCHEDULE_DATA_FILE","rb");
if (fp==NULL)
{
printf("Open fail!\n");
return 0;
}
while (!feof(fp))
{
if ( fread(data,sizeof(schedule_t),1,fp)&& data.id==ID )
{
buf=data;
found=1;
}
}
fclose(fp);
return found;
}
主要还是用了一个fread,结构体数据赋值。感觉现在是明白了好多,最后一个函数了
功能是:从文件中获取所有的演出计划数据组织成头指针为list的链表。
int Schedule_Perst_SelectAll(schedule_list_t list){
FILE *fp;
int l=0;
schedule_list_t temp;
fp=fopen("SCHEDULE_DATA_FILE","rb")
if (fp==NULL)
{
printf("Open fail!\n");
return 0;
}
while ( !feof(fp) )
{
if ( fread(fp,sizeof(schedule_list_t),1,temp) && temp->data.id==play_id )
{
List_init(list,schedule_list_t);
List_AddTail(list,temp);
l++;
}
}
fclose(fp);
return l;
}
好吧,我承认最后这一个函数是勉强写完了,其实问题有两个:
1俩个结构体的使用有些搞混了,2 就是把新的数据读到新的链表list里还是有些混啊
O_O我要不要今天就这样呢
今天的收获还是不错,更加体会fread和fwrite的使用意义,还学到了fseek这选择文件的位置函数,回头再看看
算是一个人写了一个,演出计划持久化层模块。对持久化层的编写流程是更进一步了。
好吧 今天就到这了 明天再看吧 或许睡一觉起来 会发现更多