今天是星期六,不用去实验室机房了,早上放松,刚才开始工作了。
今天的主要任务是:
完成界面层的添加演出厅函数,完成业务层的添加演出厅函数,完成持久化层的添加演出厅函数。
现在是13:42,刚才完成了界面层的函数,如下:
int Studio_UI_Add(void)
{
while (1)
{
int newCount=0;
int seat=0;
char choice;
printf("Name Rowscount Closcount : \n");
Entkey_Srv_CompNewKey();
if ( Studio_Srv_Add() )
newCount++;
else
printf("Add failed...\n");
printf("Do you want to continue?Yes or No?\n");
scanf("%c",&choice);
if ( strcmp(choice,'N')==0 )
return newCount;
else
continue;
}
}
这是凭自己现在的理解和水平写的,虽然不知道到底对不对,但是,就是这么回事,继续下一个。
打开了两个终端,把业务逻辑层和持久化层分别打开,对照着设计指导来,现在,以下是业务逻辑层的:
inline int Studio_Srv_Add(const studio_t *data)
{
if ( Studio_Perst_Insert(data)==1 )
return 1;
}
是不是感觉好短,其实我刚也这么觉得,不过,在分析后得到,原来,这最后一个持久化层,才是要写好多,有文件,文件写入,就写入的是添加的新信息。现在看到了一个文章,对三个层次的关系更进一步清楚了,如下:
首先,软件设计为什么要分层,这是为了应对软件需求的变化来考虑的,软件需求总是在变的,但变化是有规律的,不易变化的需求叫稳定需求,而易变的需求叫不稳定的需求。
而软件设计分层就是为了在不同的层次上应对这些稳定性不同的需求,在上层设计中响应不稳定的需求,而在下层设计中实现稳定的需求,而在分层后的设计中使得上层依赖下层,而不允许下层依赖上层,则可以使得应对大部分需求变化时对系统的修改最少,这就是软件分层的原理和原则。//个人理解,分层就是为了更好的对软件进行管理。
在一般的MIS系统中,通常数据库结构是最稳定的,轻易不会修改,扩充是有可能的(除非在设计数据库时对用户的业务分析有重大误解),所以通常数据层放在最下层;而业务逻辑也相对稳定但会有变化,所以放在中间层;而最易变的则是表现层,今天说字太小看不清,明天又说字太大看不全,这个说灰底色难看,那个说白底色晃眼。所以放在最上层。
关于耦合,这个词在结构化设计中用得很多,在面向对象中,通常讲依赖关系。上层对下层的依赖(或者说强耦合)是理所当然的。比如说,通常应用程序是上层,而操作系统是下层,你能说你编一个应用程序不对操作系统耦合吗?但下层对上层则绝对不能有依赖(或者说零耦合)。没听说过谁为了自己的应用程序能运行而要求微软修改操作系统的。
做到这样,你的系统就达到目的了,而完全没有必要为上层对下层的依赖(或者说强耦合)而耿耿于怀。
但下层对上层依赖则是一定要避免的,对这要极其重视。//个人理解,意思就是,持久化层现在储存的是大部分数据,一层一层的对其进行调用,业务逻辑是一个过渡,而界面层不论怎么改,最终需要实现的还是那些东西。
嗯,看了说了这么多,现在就开始,最后一层了!现在是14:23
哦yes,虽然不能激动,因为你不知道你写的到底对不对,但是现在我至少已经按思路,按逻辑写出来了,来来,下面是持久化层的添加:
Studio_Srv_Atruct //演出厅基本信息
{
int id;
char name[30];
int rowsCount;
int colsCount;
}studio_t;
typedef struct studio_node //演出厅链表
{
studio_t data;
struct studio_node *next;
struct studio_node *prev;
}studio_node_t,*studio_list_t;
studio_node_t *create() //创建链表
{
studio_node_t *p,*h,*s;
int i;
if ( (h=(studio_node_t*)malloc(sizeof(studio_node_t)))==NULL )
{
printf("Fail to place...\n");
return 0;
}
h->data.id=0;
h->next=NULL;
h->prev=NULL;
p=h;
while (p->data.id>=0)
{
if ( (s=(studio_node_t*)malloc(sizeof(studio_node_t)))==NULL)
{
printf("Fail to place...\n");
return 0;
}
p->prev=s;
printf("Input the id : ");
scanf("%d",&s->data.id);
printf("Inpur the name : ");
scanf("%s",s->data.name);
printf("Input the rowscount : ");
scanf("%d",&s->data.rowsCount);
printf("Input the colscount : ");
scanf("%d",&s->data.colsCount);
s->next=p;
s->prev=NULL;
p=s;
}
h->next=s;
p->prev=h;
return h;
}
int Studio_Perst_Insert(const studio_t *data) //持久化层主要函数
{
int rtn=0;
FILE *fp;
fp=fopen("STUDIO_DATA_FILE","ab");
if (fp==NULL)
{
printf("Open failed...\n");
return 0;
}
data=create();
printf("Input the id : ");
scanf("%d",&data->data.id);
printf("Input the name : ");
scanf("%s",data->data.name);
printf("Input the rowscount : ");
scanf("%d",&data->data.rowsCount);
printf("Input the colscount : ");
scanf("%d",&data->data.colsCount);
fprintf(fp,"%d%s%d%d\n",data->data.id,data->data.name,data->data.rowsCount,data->data.colsCount);
fclose(fp);
fp=fopen("STUDIO_DATA_FILE","r+");
printf("ID Name Rowscount Colscount :\n");
while ( fscanf(fp,"%d %s %d %d",&data->data.id,data->data.name,&data->data.rowsCount,&data->data.colsCount)!=EOF )
{
printf("%d %s %d %d\n",data->data.id,data->data.name,data->data.rowsCount,data->data.colsCount);
rtn=1;
}
return rtn;
}
以上就是实现操作的,开始:定义结构体,结构体链表,然后,在主函数中,用到了文件,这个比较基础的应用,我还是可以的,文件打开写入,而这个函数的返回值为1,在业务逻辑层调用时也就比较方便。
因为有主键,所以呢,我们就不用管它到底添加插入到哪里,因为主键会自动的识别,然后就会自动添加到下一个。现在是15:11。
现在是23:33,这两天锻炼的,现在已不是很崩溃了,但是请听我说说刚才发生了什么
50分钟之前,我本来说继续写课设的,自己再挑一个锻炼的写写,写到12点多,结果,问题就突然来了,虚拟机的ubuntu打不开了,说是物理内存不足,我也就不明白了,为什么按照人家的要求改了内存之后,还是不行,一次和一次的内存修改的还不一样,然后就为了这,刚才到现在一直在网上搜啊找啊,自己不断的尝试,结果,还是提示内存不足,我表示淡定好了,等明天再打开看吧,会不会有奇迹发生。这也算是锻炼我的解决问题的能力吧,可是到底还得等,看是否是成功的。
那现在,最后就说说结束语吧。
今天的状态已经好多了,就是今晚和家里人视频 有些不太好,这个就先放一边吧。然后,今天我的任务是完成的,不过,后来的问题是,三个层次,一个人写一个函数,三个层次里都要写,这是快,但是最后合并的时候是很难吧,现在想想就觉得,然后,一个层次一个层次的写,这样最后合并的时候就是比较快,方便了,然后想到什么一个人写的时候要调用另外一个人的时候,所以老师才说自己定义函数的返回值方便的使用。未来几天就好好写吧。
然后呢,说说环境吧,团体,我渐渐觉得这个世界就是不公平的,举个例子吧,不知道我现在这个想法对不对:我昨晚花了些功夫弄明白我们到底要写什么做什么,我就这样给我宿舍的那几个,成天耍游戏的一说,他们就知道了,很轻松,不用花那么多精力,这不是很不公平。这个课设吧,我其实也觉得一周以后是完成不了的,桉这情况,每个团队里,都有什么都不会的,有的团队有大神级别的人物,还是可以的。像我们团队,本来就都是一个宿舍的,什么水平大家都知道,组长我也就不想说,我觉得有破罐子破摔的,也不怕最后能不能完成,能不能通过课设。这个问题我现在也不想多说了,因为抱怨的太多都是无用的。我现在,只想做的
自己一天给自己找个任务,锻炼自己,现在是为了自己,不是为了这个团队,因为,这个团队本来就没有存在的价值,大家都不在一个水平线上,我现在是这样想的。反正呢,未来几天,我要好好的做自己要做的就好。