图书管理系统 C语言
前言 这是我学习C语言的第三个较正式的小项目,同样也是目前代码量和难度最大的一个挑战。这个图书管理的开发整体框架图如下,我自己凭借我能够想到的做了这么一个框架图,然后不断地去实现这些划分出来的模块。
思路分析 整个系统是由一个个小的功能模块组成的,我将其用思维导图的方式展现出来更有利于去实现这些功能模块。
图书管理系统由图书信息系统和借阅系统组成,图书信息系统是管理图书库存的,通过它实现图书的增加、删除以及像用户展示图书信息的功能,而借阅系统则是实现用户借书还书以及查询借书情况功能。
通过不断细分的模块去实现这些功能,一边写一边调试。
具体实现-
首先,经过思考,把这些功能模块用函数表达出来,尽量思考的全面,先通过函数声明以及定义把它们放到框架里面,然后一个一个具体的去写相应的代码。
#define _CRT_SECURE_NO_WARNINGS //用于scanf警告 //头文件 #include
#include //用于字符串比较 登陆系统以及查找信息 #include #include //背景色 屏幕清除 #include getch()函数 //宏定义 #define SIZE 20 #define ACCOUNT_PASSWORD "beipiao_707770" #define LEN sizeof(struct book) //分配内存 #define LEN1 sizeof(struct reader) #define ABC 'chaz'-'0' /*后面变量名太多 并且提示字符常量过多 用此表 */示 /* 结构体定义 */ //图书信息 struct book{ char name[SIZE]; //书名 char author[SIZE]; //作者 char publish[SIZE]; //出版社 int amount; //数量 float price; //单价 struct book* next; }; //借阅者信息 struct reader{ char rname[SIZE]; //姓名 char bname[SIZE]; //借阅书名 char date[SIZE]; //借阅时间 int rnum; //数量 struct reader* next; }; /* 函数声明 */ //初始化页面 void menu(); //选择系统 void SelectSystem(); //书籍数量 int NUM_BOOk(); //返回值为int类型 //借书人信息 int NUM_READER(); //返回值为int类型 //图书管理系统 void Library_System(); //新建图书信息 void New_Bulit(); //删除图书信息 void Delete(); //查询图书信息 void Inquire(); //浏览图书信息 (打印) void Browse(); //返回上一级 void Return(int i); //借阅系统 void Lending_System(); //借书 void Lending(); //还书 void Repay(); //查询借书情况】 void Show_Lending(); //查询信息 void Show_Look();
这里面有我自己最开始就已经想到的,也有后面增加的,有的函数所实现的功能与我预想的不符,但还是可以用。
2.具体实现 函数定义
- 通过函数来统计书籍的数量以及借阅者信息,返回值为int类型。为后面的循环提供条件。
/* 函数定义 */
//书籍数量信息
int NUM_BOOK()
{
FILE*fp;
int txcl=0,n;
float tprice =0;
char tname[SIZE]={'}',[tauthor]SIZE='}'{,[]tpublish=SIZE'}';{=fopen(
fp"library.txt","r");//以只读形式打开文件for( =
0 ;n!feof();++fp)//逐个打开文件 nfscanf( ,
"%s%s%s%d%f",fp,,,tname&tauthor,tpublish&)txcl;--tprice;//n初始赋值为0
nfclose( )
;//关闭文件fpreturn( )
;}n//借书人信息int
NUM_READER
(
) *;int
{
FILE=p0
, ID;char[n]
= lname'}'SIZE,[{]='0},lsname[SIZE]={'ldate}SIZE;={fopen\("reader.txt",
fp"r");//以只读方式打开文件for(=0 ;
!feofn();++);fp//逐个打开文件fscanfn(,"%d%s%s%s " ,
&,fp&,&,ID);lname--;ldate//n初始赋值为0lsnamefclose(
n); return
( )fp;}
//新建图书信息 voidnNew_Bulit(
)
这三个页面我写的很粗糙,还可以进行优化,返回上一级这个函数我开始是没有想到的,但最开始写到这里时才发现不返回上一级很难处理,所以就加了一个返回上一级的函数,同样也可以进行优化。思路都是一样的,通过按键或者输入数据进行判断,调用上一级函数。
账号登录这里我没有进行分开处理,分开处理需要加加两个储存账户和密码的文件,和借阅者信息文件一样的,输入错误这里也是,我并没有具体的去实现重新输入。我这个是1.0版本,不出意外的话以后会进行优化,学习其他的语言之后可能也会做一个类似的项目,虽然目前这个我觉得都不能称之为项目(哈哈) 。,。
这里开始用了system()进行了屏幕清除,后面也有用到,头文件为#include
//返回上一级
void Return (int i)
{
switch (i) {
case 1: Library_System();
break;
case 2: Lending_System();
break;
}
}
//初始化页面
void menu()
{
int i;
char m[SIZE]; //账户及密码
printf("****************************************************\n");
printf("* 欢迎使用图书管理系统1.0 *\n");
printf("* 1. 登录系统 2. 退出系统 *\n");
printf("****************************************************\n");
printf("\n");
printf("请输:->");
scanf("%d", &i);
//登录
if (i == 1) {
int ret_1; //比较结果
//输入
printf("输入账户及密码:");
scanf("%s", m);
//s_gets(m, SIZE);
//判断是否正确
ret_1 = strcmp(m, ACCOUNT_PASSWORD);
if (ret_1 == 0)
{
printf("登录成功!\n");
system("cls");
//选择系统
SelectSystem();
}
}
//退出
else {
return;
}
}
//图书管理系统
void Library_System()
{
int i;
system("cls");
printf("****************************************************\n");
printf("* 1.新建 2.删除 3.查询 *\n");
printf("* 4.浏览 5.返回上一级 6.结束 *\n");
printf("****************************************************\n");
printf("\n");
printf("请输:->");
scanf("%d", &i);
switch (i)
{
case 1:New_Bulit();
break;
case 2:Delete();
break;
case 3:Inquire();
break;
case 4:Browse();
break;
case 5:Return(1);
break;
case 6:return 0;
break;
}
}
//借阅系统
void Lending_System()
{
int i;
printf("****************************************************\n");
printf("* 1.借书 2.还书 *\n");
printf("* 3.查询 4.浏览 *\n");
printf("* 5.返回上一级 6.结束 *\n");
printf("****************************************************\n");
printf("\n");
printf("请输:->");
scanf("%d", &i);
switch (i)
{
case 1:Lending();
break;
case 2:Repay();
break;
case 3:Inquire();
break;
case 4:Browse();
break;
case 5:Return(1);
break;
case 6:return 0;
break;
default:printf("输入有误,重新输入!\n");
break;
}
}
- 新建图书信息这些功能都涉及了文件和链表 *** 作,文件的建立、读写,链表的增加、删除。
*
; char[]
{
FILE =fp'0},bauthor[SIZE]={'
'},bpublish[SIZE]={' bname0SIZE};{int\=0\;'float=
0 bamount;system(
"cls" bprice);if
((=fopen(
"library.txt","r"fp))==NULL)//打开文件=fopen("library.txt", "w"
{
fp);//以只写的形式打开文件,若不存在则新建fclose();}=
fopen(fp"library.txt",
"a"
fp);//以追加的形式打开文件,若不存在则新建printf("\n请按以下格式输入图书信息:\n 书名 作者 出版社 进库量 单价"); for
(;!=27;
) //为了实现一次输入后按esc退出 这是我没有想到的printfi("请输入:\n"); scanf
{
("%s%s%s%d%f",,,
,&,&bname)bauthor;bpublishfprintf(bamount,"%-9s%-14s%-16s%-7d%-.2f\n"bprice,,
,,fp,);bnameprintfbauthor(bpublish"继续输入请按回车,结束请按Esc\n"bamount)bprice;=
_getch();//用getch 会有报错
ifor(;!=13 &&
!= 27;i)/*证只能是CR和Esc才能退出循环,输入其他字符无用,暂停程序,按‘CR’继续*/=i_getch(); }
ifclose();printf
(
" *** 作成功,按任意键返回上一级!\n")fp;Library_System
();}//删除图书信息
voidDelete()
struct
- 删除图书信息和新建图书类似,把删除后的链表覆盖到原有文件
book
* =NULL;
{
//头结点 structbookhead*,* ,
* ;intp=0p1,=p20
, tamount ,;floatn=0;jchark[
] tprice='}',
[ tname]SIZE='}'{,[]tauthor=SIZE'}',{[]=tpublish'}'SIZE;char{[]=tnum'}'SIZE;//删除书籍的名字{char;*
; dnameifSIZE(({=fopen( "library.txt"
, i"r"
FILE )fp)
==NULL)fp//打开文件,判断system("cls");printf("\n记录文件不存在,按任意键返回!")getch (
{
);Return(1
);}else:
—//实现删除功能system("cls"
) ;printf("\n请输入要删除的书籍名字:"
)
; scanf
{
( "%s",);
printf("\n确认删除请回车,取消请按Esc\n");
=_getch()dname;for
(;!=13&&
i!=27;)=
_getch ()i;if(i=27)//取消
iReturn(1);
=fopeni("library.txt", "r"
);=NUM_BOOK(
fp);for(=0;<
j;++)fsanf(
, "%s%s%s%d%f"k,,,k,j&k,&
{
);fpif(strcmptname(tauthor,tpublish))tamount//将不同名字的信息复制到链表++tprice;//比较结果相同则n=0,不执行if,不同则执行
if(==1dname)tname//建立链表= =
{
n(struct book
*)nmalloc() ;
{
p1=p2;}else =;=;=LEN(struct
headbookp1*
)
malloc
{
p2->next(p1)
p2;p1//新建链表
p1}strcpy( ,);//复制书名strcpyLEN(, )
;
//复制作者名字strcpyp1->name(tname,);
//复制出版社=p1->author;tauthor//复制数量=;
//复制单价}p1->publishiftpublish(== 0
p1->amount)tamount//图书只有一项且这一项刚好和要删除的相同=
p1->priceNULLtprice; }
else
//建立链表的最后一个储存空间=n;=NULL ;
{
headfclose()
;
} }
{
p2->next=p1fopen
p1->next("library.txt",
"w")fp;//清空文件,只写打开,然后关闭
fclose
(
fp);=fopen("library.txt","a")
;//追加文件fp=;
fpfor(;!=NULL;)//把链表内容覆盖到文件fprintf
p(head,
"%-9s%-14s%-16s%-7d%-8.2f\n",,p,,,);
{
=;fp} fclose( p->name) p->author; p->publishsystem p->amount( p->price"cls")
p ; p->nextprintf
(
"\n删除成功 \n按任意键返回上一层\n")fp;_getch
();//返回上一层Return
(1);}
}//查询图书信息voidInquire(
)*;int=
0
,
- 查询相对而言简单,在文件中去查找匹配,根据结果输出
=
0 ,=0
{
FILE ,fp=
0 k;float=camount0;charm[]=n'}',[
] price='}',
[ cname]SIZE='}'{;char;cauthorcharSIZE[]{='}';cpublishifSIZE(({=fopen(
"library.txt" i,
"r" target)SIZE)=={NULL)//打开文件
system("cls"fp);printf("\n记录文件不存在,按任意键返回!");_getch(); Return
{
(1);}
system("cls");
=NUM_BOOK()
; for(=0
;
<;++)fscanf
m(,"%s%s%s%d%f",,
,,n&,&n)m;nif(
{
!strcmpfp(,)cname||cauthor!cpublishstrcmp(camount,)cprice)if
(==0)printftarget(cname"查询结果:\n\n");printf(target"书名\t\t作者\t\t出版社\t\t库存量\t单价\n"cauthor);
{
}printfk("%-8s%-14s%-16s%-7d%-8.2f\n",
{
,,,,)
;++;}}
if
(==0)cname//文件夹为空则输出无记录并返回上一级cauthorsystemcpublish(camount"cls"cprice);
kprintf(
"\n无符合记录!\n"
)
;_getchk(); Return
{
(1);}
fclose();//查询结束
_getch();
Return (1);
}
//浏览图书信息 voidfpBrowse()
*;int=
0 ;int=0
,
- 浏览图书则是把文件中的信息遍历之后打印出来
=
0 ,=0
{
FILE;fpfloat
= n0;char
[ k]='}'m,[]amount='}',
[ price]='}'
; namecharSIZE;if{((=authorfopenSIZE("library.txt"{,"r")publish)SIZE==NULL{)system(
"cls" i)
;printf(fp"\n记录文件不存在,按任意键返回!");_getch();Return(1)
{
;}=NUM_BOOK(
);if(==
0)system(
"cls" );printf(
"\n无任何记录!"
n);}=fopen
("library.txt"n,"r")
{
;//打开只读文件system("cls"
);printf("\t书名\t作者\t出版社\t\t出版社\t\t库存量\t单价\n"
)
fp;for(=0;<;++
)//输出数据fscanf(,
"%s%s%s%d%f",,,,
&,m&);mprintfn(m"%-14s%-16s%-18s%-7d%-8.2f\n", ,
{
,,fp,);name}authorfclosepublish()amount;printfprice("\n按任意键返回\n"
);_getch( name) author; publishReturn amount( price1)
;
}//借书fpvoidLending
()*,*
;structbook*
; structbook*,
*
- 借书 首先判断是否存在要借的书,再进行下一步记录借阅者信息 *** 作 具体 *** 作没太明白(copy了一段)
,
* ;int,
{
FILE,fp,=fp20
, =0head,
= 0;pint=p10;p2int
= i0loop;kfloatn=0;flagchar[]s='}',
[ lnum ] ='}'
, lamount [ ]=
'}' lprice,[]
= tname'}'SIZE,[{]='}'tauthor,SIZE[]{='}',tpublish[SIZE]={'}';systemttname(SIZE"cls"){;if(rname(SIZE=fopen{("library.txt",date"r"SIZE)){==NULL)tanamesystemSIZE("cls"{);printf
("\n图书馆无库存,按任意键退出!");_getch
();fpexit(0);}elseprintf("\n请输入借阅书名:\n请输入:")
{
scanf("%s",)
;=NUM_BOOK()
;for(=
0;<;++
)
//先将图书信息建立链表,更改库存
{
fscanf(,"%s%s%s%d%f";
,,,,taname&,
k&);++;
if(i==1)i=k=i(structbook
{
*)fpmalloc()tname;tauthor=tpublish;}lamountelse=price;=
n;=
(structnbook*)
{
p1mallocp2(); }strcpy(,)LEN;//复制书名
headstrcpyp1(
,
)
{
p2->next;p1//复制作者
p2strcpyp1(
p1,); //复制出版社=;//复制现存量=LEN;//复制单价
}
if(p1->name== tname0)=
NULL;p1->authorelse tauthor=;=
NULL;p1->publishfclose tpublish();
p1->amount } lamount}=
p1->price ; tpricefor(
;
!=NULLn;)if
head(!strcmp
(
{
p2->next,p1)
p1->next)//判断要借的书是否存在=
1;fp=;
(
)
p--head;
}=;pif(&&(
{
0))//存在被借图书并且库存大于0,把库存量变化后的链表存入文件=p->namefopentaname("library.txt",
{
flag"w");
loopfclosep->amount(
)p->amount;=fopen
(
p"library.txt"p->next,
"a")flag;=loop>;for( ;
{
fp != NULL;)fprintf (,"%-9s%-14s%-16s%-7d%-8.2f\n"
,,fp,,
fp , );=; }free(
p ) head;
fclose () p ; if((
{
=fopenfp( "reader.txt", p->name"r" p->author) p->publish) p->amount== p->priceNULL)
p //建读者文件夹存入借书信息 p->next=
fopen
("reader.txt"p,"w"
);fp//打开只读文件fclose
( );fp2 } =fopen("reader.txt" ,"a") ; printf("\n请按以下格式输入读者信息:\n 证号 姓名 借书日期 借书书名\n请输入:"
{
fp2 ) ;//录入读者信息scanf( "%d %s %s %s",&,
,,fp2);
fprintf
fp2 ( ,"\n%-8d%-23s%-18s%-10s\n",, ,,)
;fclose();printf
("借书成功!请两个月内归还!!!按任意键返回\n"); _getchlnum( rname) date; taname//返回Return
(2fp2) ;//调用借阅系统 lnum} rname} date} taname//还书void
Repay(fp2)*
,*;*,
*,*;struct
book*=NULL;struct
book
*
,
- 还书 先确定还书者信息,与借阅者文件比较,存在则删去他的信息并且书籍库存量加一。
*
, *;int
{
FILE=fp0,fp2;
strcut readerfloathead=0p1;charp2[
20 ]=lhead1'}',[
20 ]=zp1'}',lp1[20lp2]
= txcl'}',[i20
] tprice='}';
int tname=0, = { 0 ,= tauthor0,= 0 { , =0
tpublish,=0 ; { char [20 ttname]='}' , { [ 20]
= ttzhenghao '}' ,[ tzhenghao 20 ]= n '}' ,[ k 20 ]= t '}' ;char flag = 0;
system tmingzi("cls") ; { if (( triqi=fopen( "reafer.txt" { , "r") tzname)==NULL ) { //不存在借书人 system( ttzname"cls"); printf { ( "\n不存在借书人,按任意键退出!")
; hitkey _getch ()
;system("cls")
{
;Return(fp2);}elseprintf("\n请输入读者证号和书名:\n请输入:");scanf(
{
"%d %s",&,)
;//输入还书证号和书名=NUM_READER(
);//获取读者文件夹信息个数for
(=0;<
; ++)//读取读者文件夹信息fscanf
(
,
{
{
"%d%s%s%s\n ",&,,
,);if (ttzhenghao( ttzname==)&&
k ! strcmp(,))
//如果证号书名存在,则标记为1 =i 1 ;} i fclose k( i);=
{
fopen(fp"reader.txt" ,"r" )tzhenghao; tmingzi//打开读者文件,删除借书信息 triqiif tzname()
for (=ttzhenghao 0 tzhenghao; < ;++)ttzname//将读者文件复制到链表 tznamefscanf(,
flag "%d%s%s%s\n " ,&
,
,,fp);
fp //读取文件信息 if(!( (==)&&
! strcmpflag(
{
, )i ) )++ i ; kif i(==1
{
)=fp= (struct readertzhenghao* tmingzi) triqimalloc tzname();
//新建链表 =;}elsettzhenghao = tzhenghao; = ;=(ttznamestruct tznamereader*)
{
nmalloc(
) ;n //新建链表 }=
{
p1 ; p2 //复制证号 strcpy( ,);//复制读者名字strcpyLEN1(,)
head ; p1//复制日
strcpy
(
{
p2->next , p1)
p2 ; p1//复制书名
p1 } }if (==0)=LEN1NULL;else
=
p1->rnum ; tzhenghao=NULL
;fclosep1->rname( tmingzi);}
=fopenp1->date( triqi"reader.txt","w"
);p1->bname//清空读者文件 tznamefclose()
;
=
fopen (n "reader.txt" ,"a"
head ) ;//追加信息
=
{
p2->next ; p1for
p1->next ( ;!=
NULL;fp)//把链表内容覆盖读者文件
fprintf
fp ( ,"\n%-8d%-23s%-18s%-10s\n",, ,,);
=;fp}free
fp ( );fclose( );}}
p } head}
if () p //标记为1,即还书时更改库存 printf("确认还书请按回车!")
{
;forfp( ;!= p->rnum13 p->rname&& p->date!= p->bname27;
p ) p->next=
_getch
()p;if
(==fp13)
printf
(
"成功!按任意键返回!"
)
; =flag0;
{
{
{
=0;=fopen
( "library.txt", hitkey "r" ) ; hitkey //打开图书馆文件 =NUM_BOOK(
hitkey ) ;//获取图书馆文件个数for(
= 0hitkey ; <;
++)//将图书馆文件复制到链表fscanf(
n , "%s%s%d%f", flag , ,&
fp3 , &);//读取信息 ++;if(
k == 1)==(
struct booki * )malloc i ( k) i;//新建链表=
{
;}fp2else =;tname= tauthor; =txcl( structtpricebook*)
nmalloc(
) ;n //新建链表 }strcpy
{
lp1 ( lp2 , ); //复制书名strcpy(,)LEN;//复制作者strcpy
lhead1 ( lp1,
)
;
{
lp2->next //复制出版社 lp1=
lp2 ; lp1//复制现存量
lp1 = ;//复制单价 }if(==0LEN)=NULL
;
}elselp1->name= tname;=NULL
;fcloselp1->author( tauthor);}
}}lp1->publish= tpublish;for(
lp1->amount ; txcl!= NULL
lp1->price ; tprice)if
(
! (n strcmp (,
{
lhead1 ) ))
//寻找书名相同
++
{
lp2->next ( lp1)
lp1->next ; //现存量加1=
;}fp2=fopen
(
"library.txt"
,
zp1 "w" lhead1)
; //清空图书馆文件fclose zp1 ( );=
{
fopen ("library.txt","a")zp1->name; ttzname//追加信息=;for
(;zp1->amount!=NULL;
zp1 ) zp1->next//把链表内容覆盖图书馆文件
fprintf
fp2 ( ,"-9s%-14s%-16s%-7d%-8.2f\n",, ,,,)
;=fp;}
fp2 fclose ();_getch ();//返回
zp1 Return lhead1(
2 ); zp1 //调用借阅系统 }elseprintf(
{
"不存在此信息!按任意键返回!")fp2; _getch(
zp1->name) zp1->author; zp1->publish//返回 zp1->amountReturn zp1->price(2
zp1 ) zp1->next;
//调用借阅系统
}//查询借书情况fp2voidShow_Lending
()*;int
=0,=0,
=
0
,=0,=
0;char[]
='}',[]=
'}'
- 查询借书情况,把所有的借书信息打印出来
,
[ ]='}'
{
FILE;fpif
( ID(=fopenxcl("reader.txt".n"r"))i==NULL)j//打开只读文件system(
"cls" name)SIZE;printf{("\n记录文件不存在,按任意键返回!")date_getchSIZE(){;Return(bname2SIZE);{}==NUM_BOOK
();fpif(==0)system("cls");printf(
{
"\na无任何记录!");}=
fopen("reader.txt",;
"r");system
("cls");printf
(
n"\n证号\t读者姓名\t\t借书日期\t书名\n");for(
;!nfeof()
{
;)//输出信息 foef()是在文件已经打开的基础上用于验证文件是否读取结束fscanf(
,"%d%s%s%s\n",&,
,
fp,);printf("\n%-8d%-23s%-18s%-10s\n",,
,,);}
fclose();printf
("\n按任意键返回!\n");_getch(fp);Return(
{
2)fp;}//查询信息voidIDShow_Lookname(date)bname*;
int=0,ID=name0date,bname=0
,
=0fp,=
0;char[]
='}',[
]='}',[
]
- 查询一个人的借书情况, 输入要查找的证件号或者姓名到借阅者文件里面匹配,输出相应的结果。
=
'}' ;char=
{
FILE0fp;
char num[]=k'}';ifamount((=mfopen("reader.txt"n,"r")
) ID==SIZENULL){//打开只读文件system(date"cls"SIZE);{printf("\n记录文件不存在,按任意键返回!"bname)SIZE;_getch{();
Return i(2)
; target}sizesystem({"cls");
printf("请输入证件号或者姓名查询:\n"fp);scanf("%s",);system("cls")
{
;=NUM_BOOK()
;for(=0
;<;++
) fscanf(,"%d%s%s%s"
,
&,,,)
;if(!strcmp
(,)||target()
==)if(==
n0)printf("查询结果:\n\n"
);nprintf("\n证号\t读者姓名\t\t借书日期\t书名\n"n)m;n}printf
{
("\n%-8%-23s%-18s%-10s\n"fp,,,,num)name;date++bname;}
}if(==0target)name//文件夹为空则输出无记录并返回上一级system(ABC"cls")num;
{
printf(k"\n无符合记录\n");
{
_getch();Return
(2);}
fcose
();_getchID(name)date;bnameReturn(
k2)
;
}
k
{
fp
总结
-
通过这个小项目的练手,主要总结出了两方面的问题。
-
首先,我在准备的过程中,思考不足,很多地方没有想到,比如返回上一级这个功能。结果可想而知,在动手敲代码的时候总会有很多临时需求冒出来,很是痛苦。并且在准备的过程中我并没有很强的逻辑性,所以在后面写文档的时候需要重新整理思路,当然,在这个过程中我也收获了许多。在准备的时候我选择用思维导图的方式,我初步学习了如何制作思维导图,更加熟悉小工具的使用。准备周期长但准备效果并没有达到预期。
其次,就是在敲代码的过程中出现的问题。 万事开头难,这一次并没有出现明显开头难的问题,我对比上一次这次明显有进步,我自己先把大致的框架写了出来,然后具体去实现。初生牛犊不怕虎,很明显。然后就出现了问题,开始解决问题,有的问题还没有解决掉,可能是我自己经验知识点还不够,所以这些问题我会过一段时间再回过头来解决。有一个问题感觉很初级,就是变量命名,虽然这次涉及的变量命名不是很多,但我还是在命名上出现了问题,命名没有弄好的那注释就很重要(虽然注释本来就很重要),不然过段时间自己都不知道这些变量是什么意思。每次解决问题的过程就是提升自己的过程,这一次我已经有了不错的收获。
下面是我的一些自我鼓励吧,也是心中的一些想法。
每当自己心里有一个想法的时候,我们要尽可能地去实现它,学编程真的得多敲代码,有时候在实际行动中会出现许多以前自己没有遇到过的问题,而解决这些问题就是提升自己的有效途径,这与学习书本知识是不一样的,而这也是我认为编程的魅力之处,虽然这个过程很痛苦,但痛并快乐着。
实践是检验真理的唯一标准,学习就得不断实践。每天坚持学习,哪怕每天进步一点点我们也会不断靠近我们的目标,制定好每天的计划然后努力完成,坚持下去,会有许多收获的,虽然可能别人无法理解,但我们自己要坚定我们所热爱的,朝着目标前进。可能是自学的原因,也有其他方面的影响,遇到很难的问题的时候我也会逃避, 但最后还是会花时间去解决,尽管问题有时候还是不能解决,但这很正常,我们过段时间后可能新学到的知识会让我们理解之前的一些问题。学习没有捷径可走,我相信笨鸟先飞、勤能补拙,我自己是不会轻易放弃的,总得去试一试,哪怕结果不如人意,但我还是想去看看风景,哈哈哈。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)