Head First Java中文版 有电子版的吗
网站项目管理规范 一.概念 网站项目管理就是根据特定的规范、在预算范围内、按时完成的网站开发任务。
二.需求分析 1.项目立项 我们接到客户的业务咨询,经过双方不断的接洽和了解,并通过基本的可行性讨论够,初步达成制作协议,这时就需要将项目立项。
较好的做法是成立一个专门的项目小组,小组成员包括:项目经理,网页设计,程序员,测试员,编辑/文档等必须人员。
项目实行项目经理制。
2.客户的需求说明书 第一步是需要客户提供一个完整的需求说明。
很多客户对自己的需求并不是很清楚,需要您不断引导和帮助分析。
曾经有一次,我问客户:“您做网站的目的是什么?”他回答:“没有目的,只是因为别人都有,我没有!”。
这样的客户就需要耐心说明,仔细分析,挖掘出他潜在的,真正的需求。
配合客户写一份详细的,完整的需求说明会花很多时间,但这样做是值得的,而且一定要让客户满意,签字认可。
把好这一关,可以杜绝很多因为需求不明或理解偏差造成的失误和项目失败。
糟糕的需求说明不可能有高质量的网站。
那么需求说明书要达到怎样的标准呢?简单说,包含下面几点: 1.正确性:每个功能必须清楚描写交付的功能; 2.可行性:确保在当前的开发能力和系统环境下可以实现每个需求; 3.必要性:功能是否必须交付,是否可以推迟实现,是否可以在削减开支情况发生时"砍"掉; 4.简明性:不要使用专业的网络术语; 5.检测性:如果开发完毕,客户可以根据需求检测。
三.系统分析 1.网站总体设计 在拿到客户的需求说明后,并不是直接开始制作,而是需要对项目进行总体设计,详细设计,出一份网站建设方案给客户。
总体设计是非常关键的一步。
它主要确定: 1.网站需要实现哪些功能; 2.网站开发使用什么软件,在什么样的硬件环境; 3.需要多少人,多少时间; 4.需要遵循的规则和标准有哪些。
同时需要写一份总体规划说明书,包括: 1.网站的栏目和版块; 2.网站的功能和相应的程序; 3.网站的链接结构; 4.如果有数据库,进行数据库的概念设计; 5.网站的交互性和用户友好设计。
2.网站建设方案 在总体设计出来后,一般需要给客户一个网站建设方案。
很多网页制作公司在接洽业务时就被客户要求提供方案。
那时的方案一般比较笼统,而且在客户需求不是十分明确的情况下提交方案,往往和实际制作后的结果会有很大差异。
所以应该尽量取得客户的理解,在明确需求并总体设计后提交方案,这样对双方都有益处。
网站建设方案的包括以下几个部分: 1.客户情况分析; 2.网站需要实现的目的和目标; 3.网站形象说明; 4.网站的栏目版块和结构; 5.网站内容的安排,相互链接关系; 6.使用软件,硬件和技术分析说明; 7.开发时间进度表; 8.宣传推广方案; 9.维护方案; 10.制作费用; 11.本公司简介:成功作品,技术,人才说明等。
当您的方案通过客户的认可,您可以开始动手制作网站了。
但还不是真正意义上的制作,你需要进行详细设计: 3.网站详细设计 总体设计阶段以比较抽象概括的方式提出了解决问题的办法。
详细设计阶段的任务就是把解法具体化。
详细设计主要是针对程序开发部分来说的。
但这个阶段的不是真正编写程序,而是设计出程序的详细规格说明。
这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该 包含必要的细节,例如:程序界面,表单,需要的数据等。
程序员可以根据它们写出实际的程序代码。
四. 项目实施 1.整体形象设计 在程序员进行详细设计的同时,网页设计师开始设计网站的整体形象和首页。
整体形象设计包括标准字,Logo,标准色彩,广告语等。
首页设计包括版面,色彩,图像,动态效果,图标等风格设计,也包括banner,菜单,标题,版权等模块设计。
首页一般设计1-3个不同风格,完成后,供客户选择。
记住:在客户确定首页风格之后,请客户签字认可。
以后不得再对版面风格有大的变动,否则视为第二次设计。
开发制作 2.开发制作 到这里,程序员和网页设计师同时进入全力开发阶段,需要提醒的是,测试人员需要随时测试网页与程序,发现Bug立刻记录并反馈修改。
不要等到完全制作完毕再测试,这样会浪费大量的时间和精力。
项目经理需要经常了解项目进度,协调和沟通程序员与网页设计师的工作。
调试完善 3.调试完成 在网站初步完成后,上传到服务器,对网站进行全范围的测试。
包括速度,兼容性,交互性,链接正确性,程序健壮性,超流量测试等,发现问题及时解决并记录下来。
为什么要记录文档呢?其实本软件工程本身就是一个文档,是一个不断充实和完善的标准。
通过不断的发现问题,解决问题,修改,补充文档,使这个标准越来越规范,越来越工业化。
进而使得网站开发趋向规范,趋向合理。
4.宣传推广 宣传推广的基本方法有: 1.网页里设置适当的META标签; 2.各搜索引擎登录; 3.准备新闻稿件在各新闻公告板发表; 4.合理使用Email邮件列表; 5.广告条交换; 6.付费广告。
至此,网站项目建设完毕,将有关网址,使用操作说明文档等提交客户验收。
如果需要...
Head First JavaScript怎么样
是书么,那我建议你看国内的书,除非你英文非常好,或者技术非常好(再好的书,经过翻译以后也都面目全非了)我推荐bbs.51js.com论坛的 月影的《JavaScript王者归来》我去年冬天看的,很有帮助,,看完了以后你对JavaScript问题就可以迎刃而解了如果有兴趣的话,还有一本国外的《JavaScript设计模式》其实就是用JavaScript去实现面向对象语言的设计很有意思,对做大量JavaScript的架构有很大帮助哦
c语言课程设计之学生成绩管理系统设计的程序
展开全部 #include#include#include #include#define MAX 80#define max 3int nu=0;struct classname{ char name[20]; float score;};struct student{ char no[20]; char std_name[20]; struct classname km[max]; float ave; float sum; int save;};struct student stu[MAX],*p;void chushi(){ int i,j; for(i=0;i<MAX;i++) { for(j=0;j<20;j++) { stu[i].no[j]=NULL; stu[i].std_name[j]=NULL; stu[i].km[j].name[j]=NULL; stu[i].km[j].score=0; } stu[i].ave=0; stu[i].sum=0; stu[i].save=0; }}void av()/*求平均值*/{ int i; for(i=0;i<nu;i++) { stu[i].sum=stu[i].km[1].score+stu[i].km[2].score+stu[i].km[3].score; stu[i].ave=stu[i].sum/3; }}void first_check(){ FILE *p; int i,j; struct classname frist[max]; for(i=0;i<max;i++) { for(j=0;j<20;j++) frist[i].name[j]=NULL; frist[i].score=0; } if ((p=fopen("c:\\kemu.txt","r"))==NULL) { printf("您好,欢迎使用学生成绩管理系统\n\n因为您是第一次使用,请输入科目名称(三科)\n\n"); p=fopen("c:\\kemu.txt","w"); printf("输入课程1名称:"); scanf("%s",frist[0].name); fprintf(p,"%s\n",frist[0].name); printf("输入课程2名称:"); scanf("%s",frist[1].name); fprintf(p,"%s\n",frist[1].name); printf("输入课程3名称:"); scanf("%s",frist[2].name); fprintf(p,"%s\n",frist[2].name); } system("cls"); fclose(p);}void save_nu(){ FILE *p; p=fopen("c:\\renshu.txt","w"); fprintf(p,"%d\n",nu); fclose(p);}void Save_add(int n){ FILE * p; int i; p= fopen("c:\\cheji.txt","at"); if (p == NULL) { printf("文件不存在!!\n"); exit(0); } save_nu(); for (i = 0;i<n;i++) if(stu[i].save==1) { stu[i].sum=stu[i].km[1].score+stu[i].km[2].score+stu[i].km[3].score; stu[i].ave=stu[i].sum/3; fprintf(p,"%s %s %2.1f %2.1f %2.1f %2.1f %2.1f \n",stu[i].no,stu[i].std_name,stu[i].km[0].score,stu[i].km[1].score,stu[i].km[2].score,stu[i].ave,stu[i].sum); } fclose(p);}void Save(){ FILE * p; int i; p= fopen("c:\\cheji.txt","w"); if (p == NULL) { printf("文件不存在!!\n"); exit(0); } save_nu(); for (i = 0;i<nu;i++) if(stu[i].save==1) { av(); fprintf(p,"%s %s %2.1f %2.1f %2.1f %2.1f %2.1f \n",stu[i].no,stu[i].std_name,stu[i].km[0].score,stu[i].km[1].score,stu[i].km[2].score,stu[i].ave,stu[i].sum); } fclose(p);}int read_nu(){ FILE *p; char ch,s[10]={'\0'}; int i=0; p=fopen("c:\\renshu.txt","r"); if(p==NULL) { save_nu(); return 0; } ch=fgetc(p); while(ch!='\n') { s[i]=ch; ch=fgetc(p); i++; } nu=atoi(s); fclose(p); return 0;}int read_km(){ FILE *p; int i,j=0; char s[20]={'\0'}; chushi(); p=fopen("c:\\kemu.txt","r"); if(p==NULL) { printf("ERROR read_km"); return 0; } fgets(s,20,p); while(strlen(s)!=0) { for(i=0;i<strlen(s);i++) if(s[i]==10) { s[i]='\0'; break; } for(i=0;i<=nu;i++) strcpy(stu[i].km[j].name,s); for(i=0;i<20;i++) s[i]='\0'; j++; fgets(s,20,p); }}void read(){ FILE *p; int i,j,n,k,z=0; char s[50]={'\0'}; char o[10]={'\0'}; p=fopen("c:\\cheji.txt","r"); if(p==NULL) printf("ERROR_read"); chushi(); read_km(); fgets(s,50,p); while(strlen(s)!=0) { j=0; for(i=0;i<50;i++) { if(s[i]!='\n') { n=0; while(j==0) { if(s[i]!=' ') { stu[z].no[n]=s[i]; n++;i++; } else break; } while(j==1) { if(s[i]!=' ') { stu[z].std_name[n]=s[i]; n++;i++; } else break; } while(j==2) { if(s[i]!=' ') { o[n]=s[i]; n++;i++; } else { stu[z].km[0].score=atoi(o); break; } } while(j==3) { if(s[i]!=' ') { o[n]=s[i]; n++;i++; } else { stu[z].km[1].score=atoi(o); break; } } while(j==4) { if(s[i]!=' ') { o[n]=s[i]; n++;i++; } else { stu[z].km[2].score=atoi(o); break; } } while(j==5) { if(s[i]!=' ') { o[n]=s[i]; n++;i++; } else { stu[z].ave=atoi(o); break; } } while(j==6) { if(s[i]!=' ') { o[n]=s[i]; n++;i++; } else { stu[z].sum=atoi(o); break; } } for(k=0;k<10;k++) o[k]='\0'; } else break; j++; } for(i=0;i<50;i++) s[i]='\0'; fgets(s,50,p); z++; }}void putin(){ int n,i=0; char ch; read_km(); do { printf("\t\t\t\t录入学员信息\n输入第%d个学员的信息\n",i+1); printf("\n输入学生编号:"); scanf("%s",stu[i].no); printf("\n输入学员姓名:"); scanf("%s",stu[i].std_name); printf("\n输入课程%s的分数:",stu[0].km[0].name); scanf("%f",&stu[i].km[0].score); printf("\n输入课程%s的分数:",stu[0].km[1].name); scanf("%f",&stu[i].km[1].score); printf("\n输入课程%s的分数:",stu[0].km[2].name); scanf("%f",&stu[i].km[2].score); stu[i].save=1; printf("\n\n"); i++; n=i; printf("是否继续输入?(Y/N)"); fflush(stdin); ch=getch(); system("cls"); } while(ch!='n'&&ch!='N'); system("cls"); if(nu==0) { nu=n; Save(); } else { nu=n+nu; Save_add(n); }}int putout(){ int i;char s; if(nu==0) { printf("学生信息为零!请录入..."); return 0; } read(); do { printf("学生成绩信息:\n\n"); for(i=0;i<nu;i++) printf("学号:%s 姓名:%s\n%s分数:%2.1f\t%s分数:%2.1f\t%s分数:%2.1f\n平均分数:%2.1f\t总成绩:%2.1f\n\n",stu[i].no,stu[i].std_name,stu[i].km[0].name,stu[i].km[0].score,stu[i].km[1].name,stu[i].km[1].score,stu[i].km[2].name,stu[i].km[2].score,stu[i].ave,stu[i].sum); printf("\t\t按任意...
设计题目—单向链表
头文件:LinkList.h typedef struct LNode { int data; struct LNode *next; }LNode, *pLinkList; class LinkList { private: pLinkList m_pList; int m_listLength; public: LinkList(); ~LinkList(); bool InitList (); bool DestroyList (); bool ClearList(); bool IsEmpty (); int GetLength (); bool GetNode(int position, LNode** node); int LocateElem(int elem); bool SetNodeData(int position, int newData); bool GetNodeData(int position, int &data); bool InsertNode(int beforeWhich, int data); bool DeleteNode(int position); }; Cpp文件:LinkList.cpp#include #include "LinkList.h" LinkList::LinkList() { m_pList = NULL; m_listLength = 0; InitList(); } LinkList::~LinkList() { if (!DestroyList()) { DestroyList(); } }//初始化,分配一个头节点。
bool LinkList::InitList() { if (!(m_pList = new LNode)) { return false; } m_pList->next = NULL; return true; }//销毁链表。
bool LinkList::DestroyList() { if (!ClearList()) { return false; } delete m_pList; return true; }//判断链表是否为空。
若为空,返回true,否则返回false。
bool LinkList::IsEmpty() { if (m_pList->next == NULL) { return true; } return false; }//返回链表的中当前节点数。
int LinkList::GetLength() { return m_listLength; }//将链表清空,释放当前所有节点。
bool LinkList::ClearList() { if (m_pList == NULL) { return false; } LNode *pTemp = NULL; while (m_pList->next != NULL) { pTemp = m_pList->next; m_pList->next = pTemp->next; delete pTemp; } m_listLength = 0; return true; }//将position指定的节点内的数据设置为newData。
//第一个有效节点的position为1。
bool LinkList::SetNodeData(int position, int newData) { LNode *pTemp = NULL; if (!(GetNode(position, &pTemp))) { return false; } pTemp->data = newData; return true; }//得到指定位置节点的数据。
//节点索引从1到listLength。
bool LinkList::GetNodeData(int position, int &data) { LNode *pTemp = NULL; if (!(GetNode(position, &pTemp))) { return false; } data = pTemp->data; return true; }//在链表中插入一个节点。
//插入的位置由beforeWhich指定,新节点插入在beforeWhich之前。
//beforeWhich的取值在1到ListLength+1之间。
bool LinkList::InsertNode(int beforeWhich, int data) { LNode *pTemp = NULL; if (beforeWhich (m_listLength + 1)) { return false; } if (!(GetNode(beforeWhich - 1, &pTemp))) { return false; } LNode *newNode = new LNode; newNode->data = data; newNode->next = pTemp->next; pTemp->next = newNode; m_listLength++; return true; }//删除一个指定的节点。
//节点位置由position指定。
//positon的值从1到listLength。
//若链表为空或指定的节点不存在则返回false。
bool LinkList::DeleteNode(int position) { if (position m_listLength) { return false; } LNode *pTemp = NULL; if (!(GetNode(position - 1, &pTemp))) { return false; } LNode *pDel = NULL; pDel = pTemp->next; pTemp->next = pDel->next; delete pDel; m_listLength--; return true; }//得到指定位置节点的指针。
bool LinkList::GetNode(int position, LNode **node) { LNode *pTemp = NULL; int curPos = -1; pTemp = m_pList; while (pTemp != NULL) { curPos++; if (curPos == position) break; pTemp = pTemp->next; } if (curPos != position) { return false; } *node = pTemp; return true; }//定位与指定数据相等的数据节点。
//如果在当前链表中已经存在该数据则返回该数据节点的索引号。
//若不存在这样的节点则返回0。
//节点索引从0开始到listLength。
int LinkList::LocateElem(int elem) { LNode *pTemp = NULL; int curIndex = 1; pTemp = m_pList->next; while ((pTemp != NULL) && (pTemp->data != elem)) { pTemp = pTemp->next; curIndex++; } if (pTemp == NULL) { return 0; } return curIndex; }/* int main(){ LinkList l; l.InsertNode(1, 10); l.InsertNode(2, 20); l.InsertNode(3, 30); l.InsertNode(4, 40); cout int dataTemp = 0; for (int i = 1; i l.GetNodeData(i, dataTemp); cout } if (l.SetNodeData(3, 50)) { cout } else { cout } for (i = 1; i l.GetNodeData(i, dataTemp); cout } if (l.DeleteNode(4)) { cout } else { cout } for (i = 1; i l.GetNodeData(i, dataTemp); cout } cout return 0; }*/
本人想学习编程,需要哪些入门书籍
C语言、C++、或者java具体怎样学编程 :1.明确学习目的学习编程对大多数IT业人员来说都是非常有用的。
学编程,做一名编程人员,从个人角度讲,可以解决在软件使用中所遇到的问题,改进现有软件,可以为自己找到一份理想的工作添加重要得砝码,有利于在求职道路上谋得一个好的职位;从国家的角度,可以为中国的软件产业做出应有的贡献,一名优秀的程序员永远是被争夺的对象。
学习编程还能锻炼思维,使我们的逻辑思维更加严密;能够不断享受到创新的乐趣,将一直有机会走在高科技的前沿,因为程序设计本身是一种创造性的工作。
知识经济时代给我们带来了无限的机会,要想真正掌握计算机技术,并在IT行业里干出一番事业来,有所作为,具有一定的编程能力是一个基本条件和要求。
2.打好基础学编程要具备一定的基础,总结之有以下几方面: (1)数学基础 从计算机发展和应用的历史来看计算机的数学模型和体系结构等都是有数学家提出的,最早的计算机也是为数值计算而设计的。
因此,要学好计算机就要有一定的数学基础,出学者有高中水平就差不多了。
(2)逻辑思维能力的培养学程序设计要有一定的逻辑思维能力,“逻思力”的培养要长时间的实践锻炼。
要想成为一名优秀的程序员,最重要的是掌握编程思想。
要做到这一点必须在反复的实践、观察、分析、比较、总结中逐渐地积累。
因此在学习编程过程中,我们不必等到什么都完全明白了才去动手实践,只要明白了大概,就要敢于自己动手去体验。
谁都有第一次。
有些问题只有通过实践后才能明白,也只有实践才能把老师和书上的知识变成自己的,高手都是这样成材的。
(3)选择一种合适的入门语言 面对各种各样的语言,应按什么样的顺序学呢?程序设计工具不外乎如下几类: 1)本地开发应用软件开发的工具有:Visual Basic 、Delphi 、VC++ ( C++ Builder ) 等;数据库开发工具有:Visual Foxpro 、Oracle Developer 、Power Builder 等。
2)跨平台开发开发工具如 Java 等。
3)网络开发对客户端开发工具如:Java Script 等;对服务器开发工具如:PHP 、ASP 、JSP 、ISAPI 、NSAPI 、CGI 等。
以上不同的环境下几种开发工具中 VB 法简单并容易理解,界面设计是可设化的,易学、易用。
选 VB 作为入门的方向对出学者是较为适合的。
3. 注意理解一些重要概念一本程序设计的书看到的无非就是变量、函数、条件语句、循环语句等概念,但要真正能进行编程应用,需要深入理解这些概念,在理解的基础上应用,不要只简单地学习语法、结构,而要吃透针对这些语法、结构的应用例子,做到举一反三,触类旁通。
4.掌握编程思想学习一门语言或开发工具,语法结构、功能调用是次要的,最主要是学习它的思想。
例如学习 VC 就要学习 Windows 的内在机理、什么是线程......;学习 COM 就要知道 VTALBE 、类厂、接口、idl......,关键是学一种思想,有了思想,那么我们就可以触类旁通。
5.多实践、多交流掌握编程思想必须在编程实际工作中去实践和体会。
编程起步阶段要经常自己动手设计程序,具体设计时不要拘泥于固定的思维方式,遇到问题要多想几种解决的方案。
这就要多交流,各人的思维方式不同、角度各异,各有高招,通过交流可不断吸收别人的长处,丰富编程实践,帮助自己提高水平。
亲自动手进行程序设计是创造性思维应用的体现,也是培养逻辑思维的好方法。
6.养成良好的编程习惯编程入门不难,但入门后不断学习是十分重要的,相对来说较为漫长。
在此期间要注意养成一些良好的编程习惯。
编程风格的好坏很大程度影响程序质量。
良好的编程风格可以使程序结构清晰合理,且使程序代码便于维护。
如代码的缩进编排、变量命令规则的一致性、代码的注释等。
7.上网学编程在网上可以学到很多不同的编程思想、方法、经验和技巧,有大量的工具和作品及相关的辅导材料供下载。
例如网站“编程课堂”()主要以 VB 和 Delph;教学和交流为主,提供大量实用技巧;网站“现在时编程学园”()是专门介绍C、VC、VB、Delphi 等的综合编程网站;网站“ VB 编程乐园 ”()提供内容丰富而且实用的编程技术文章、精选控件、源代码下载、计算机考试、相关软件以及编程书籍推荐等等。
8.加强计算机理论知识的再学习学编程是符合“理论→实践→再理论→再实践”的一个认识过程。
一开始要具有一定的计算机理论基础知识,包括编程所需的数学基础知识,具备了入门的条件,就可以开始编程的实践,从实践中可以发现问题需要加强计算机理论知识的再学习。
程序人人皆可编,但当你发现编到一定程度很难再提高的时候,就要回头来学习一些计算机科学和数学基础理论。
学过之后,很多以前遇到的问题都会迎刃而解,使人有豁然开朗之感。
因此在学习编程的过程中要不断地针对应用中的困惑和问题深入学习数据结构、算法、计算机原理、编译原理、操作系统原理、软件工程等计算机科学的理论基础和数理逻辑、代数系统、图论、离散数学等数学理论基础知识。
这样经过不断的学习,再努力地实践,编程水平一定会不断提高到一个新高度。
转载请注明出处51数据库 » head first 软件设计