C++大作业
- 格式:doc
- 大小:50.50 KB
- 文档页数:7
学习中心/函授站姓名学号西安电子科技大学网络与继续教育学院2022 学年下学期《面向对象程序设计(C++)》期末考试试题(综合大作业)考试说明:1、大作业试题公布时间:(1)毕业班:2022 年10 月21 日;(2)正常班:2022 年11 月18 日;2、考试必须独立完成,如发现抄袭、雷同均按零分计;3、答案须用《西安电子科技大学网络与继续教育学院2022 秋期末考试答题纸》(个人专属答题纸)手写完成,要求字迹工整、卷面干净、整齐;4、在线上传时间:(1)毕业班学生于2022 年10 月21 日至2022 年11 月1 日在线上传大作业答卷;(2)正常班学生于2022 年11 月18 日至2022 年12 月5 日在线上传大作业答卷;5、拍照要求完整、清晰,一张图片对应一张个人专属答题纸(A4 纸),正确上传。
一、简答题(10 分)1、运算符 new 和 delete 的功能分别是什么?(3 分)答案:运算符new的功能是创建动态对象;delete的功能是释放由new创建的动态对象。
2、若派生类以 private 方式从一个基类派生,派生类的对象可以访问基类中的哪些成员?派生类的成员函数可以访问基类中的哪些成员?(3 分)答案:若派生类以private方式从一个基类派生,派生类的对象不能访问基类中的任何成员(1分);派生类的成员函数可以访问基类中的public和protected成员(2分)。
3、构造函数的作用是什么?在创建派生类的对象时,应按照怎样的顺序调用构造函数?(4 分)答案:构造函数的作用是创建对象并对其进行必要的初始化。
(1分)构造函数调用顺序:基类构造函数、子对象类构造函数(如果有)、派生类构造函数。
(2分)二、填空题(每空 2 分,共 20 分)1、函数的返回值是通过函数体中的return语句带回的;若被调用函数被定义为 void 类型,则被调用函数不带回任何值。
2、表示逻辑关系“ a 大于等于8 或者 a 小于等于5”的C++表达式是。
c语言大作业课程设计一、课程目标知识目标:1. 学生能掌握C语言的基本语法,包括变量定义、数据类型、运算符、控制结构等;2. 学生能理解函数的定义和调用,灵活运用函数实现模块化编程;3. 学生能掌握数组、指针、结构体等C语言高级特性,并应用于实际编程中;4. 学生了解文件操作的基本方法,能够读写文件,实现数据的持久化存储。
技能目标:1. 学生能够运用C语言编程解决实际问题,具备独立分析和解决问题的能力;2. 学生能够运用所学知识,设计并实现一个小型的C语言项目;3. 学生能够通过编程实践,提高逻辑思维能力和编程技巧;4. 学生能够熟练使用集成开发环境(IDE),调试程序并优化代码。
情感态度价值观目标:1. 学生培养对编程的兴趣,激发学习计算机科学的热情;2. 学生养成合作、探究的学习习惯,培养团队协作能力;3. 学生通过编程实践,体验解决问题的成就感,增强自信心;4. 学生遵循编程规范,注重代码质量,培养良好的编程习惯。
课程性质:本课程为C语言大作业课程设计,旨在巩固和拓展学生对C语言知识的掌握,提高学生的编程能力和实践能力。
学生特点:学生已经掌握了C语言的基本知识,具备一定的编程基础,但缺乏实际项目经验。
教学要求:注重实践,引导学生通过动手编程解决问题,培养学生独立思考和解决问题的能力。
将课程目标分解为具体的学习成果,以便于后续教学设计和评估。
二、教学内容1. 复习C语言基础知识,包括变量、数据类型、运算符、控制结构等,参考教材第1-4章;2. 函数的定义、调用、参数传递及作用域,引用教材第5章;3. 数组、字符串、指针的概念及应用,深入讲解教材第6-7章;4. 结构体、联合体、枚举类型的使用,分析教材第8章;5. 文件操作,包括文件的打开、读写、关闭,依据教材第9章;6. 面向过程的编程思想,以实际项目为例,引导学生运用所学知识设计程序;7. 编程规范和调试技巧,培养学生的良好编程习惯;8. 小型项目实践,分组进行项目设计和开发,涵盖整个C语言知识体系。
c语言大作业综合第一章C语言简介及算法一.选择题1.一个C程序可以包含的函数。
A.一个B.多个C.若干D.任意2.下面不可以使用来编译和连接一个C 程序。
A.TurboCB.VC++C.C语言编译器D.BC3.C语言的程序一行写不下时,可以。
A.用逗号换行B.用分号换行C.在任意一空格处换行D.用回车符换行4.C控制语句有种。
A.6B.9C.32D.345.复合语句是用一对界定的语句块。
A.{}B.[]C.()D.”6.一个C程序的执行总是从该程序的函数开始,在函数最后结束。
A.第一个、最后一个B.main、mainC.主函数、最后一个D.第一个、第一个7.C语言提供的合法的数据类型关键字A.FloatB.ignedC.integerD.Char8.在以下各组标识符中,合法的标识符是(1)A.B01B.table_1C.0_tD.k%(2)A.Fat_B.voidC.pblD.(3)A.某y_B.longdoubleC.某pD.CHAR(4)A.jB.IntC._某yD.w_y239.C语言的标识符里不能有A.大小写字母B.数字C..D.下划线二.填空题1.C程序是由构成的,一个C程序中至少包含因此,是C程序的基本单位。
2.C程序注释是由和所界定的文字信息组成的。
3.函数体一般包括和4.算法是解决问题的和的描述。
5.C程序的注释部分可以出现在程序的位置,它对程序的编译和运行作用,但是可以增加程序的第二章C语言数据类型、基本运算及简单程序设计一.选择题1.不合法的字符常量是A.‘\\t’B.“A”C.‘a’D.’\\某32’2.逻辑运算符两侧运算对象的数据类型。
A.只能是0或1B.只能是0或非0正数C.只能是整型或字符型数据D.可以是任何类型的数据3.下列表达式中,不满足“当某的值为偶数时值为真,为奇数时值为假”的要求。
A.某%2==0B.!某%2!=0C.(某/2某2-某)==0D.!(某%2)4.下面选项中,不是合法整型常量的是A.160B.-0某cdgC.-01D.-0某48a5.能正确表示“当某的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是。
#include<iostream> #include<stdlib.h>#include<windows.h>#include<time.h>#include<conio.h> usingnamespacestd;HANDLEMutex=CreateMutex(NULL,FALSE,NULL);/互/ 斥对象intGameOver=0;intlevel=0;intmap[23][23];// 坦克种类,Normal 为玩家坦克#defineNormal0#defineRed1#defineBlue2#defineGreen3// 方向的宏定义#defineUp0#defineDown1#defineLeft2#defineRight3// 地图标记的宏定义#defineEmpty0#definePlayer1#definePlayerBullet2#defineEnemyBullet3#defineEnemy4intKill;intKillRed;intKillGreen;intEnemyExist;voidSetPos(inti,intj)// 设定光标位置{COORDpos={i,j};HANDLEOut=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(Out,pos);}voidHideCurSor(void)// 隐藏光标{CONSOLE_CURSOR_INFOinfo={1,0};HANDLEOut=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorInfo(Out,&info);}intsharp[4][12]={0,1,1,0,1,1,1,2,2,0,2,2},{0,0,0,2,1,0,1,1,1,2,2,1},{0,1,0,2,1,0,1,1,2,1,2,2},{0,0,0,1,1,1,1,2,2,0,2,1},};// 此数组用来保存坦克各个方向的形状信息DWORDWINAPIBulletfly(LPVOIDlpParameter);// 子弹函数申明voidUpdata();// 更新界面信息函数申明classTank// 坦克类{private:intDirection;// 方向inthotpoint[2];// 活动点intSpeed;// 速度intFirePower;// 火力public:Tank(intdir,inthot1,inthot2,inttyp,intspe,intfirepow)// 构造函数{Direction=dir;hotpoint[0]=hot1;hotpoint[1]=hot2; }Type=typ;Speed=spe;FirePower=firepow;}intType;// 坦克的种类(详见宏定义) intID;// 坦克在MAP中的标记(详见宏定义) intFireEnable;// 是否可以开火intLife;// 生命值voidRunning();// 运行函数intJudge(intx,inty,intID);// 判断是否可以绘制坦克voidDrawTank();// 重绘坦克voidRedraw();// 擦除坦克intGetSpeed()// 获取速度{returnSpeed;}intGetFire()// 获取火力{returnFirePower;}intGetDirection()// 获取方向{returnDirection;}intGetHotX()// 获取活动点坐标{returnhotpoint[0];}intGetHotY(){returnhotpoint[1];}voidIncreaseFire()// 火力+{FirePower++;}voidIncreaseSpeed()// 速度+{Speed++;}voidChangeDirection(intnewD)//改变方向{Direction=newD;}voidChangePos(intx,inty)// 改变活动点{hotpoint[0]=x;hotpoint[1]=y;}};Tankplayer(Right,0,0,Normal,1,1);// 玩家Tankenemy(Left,20,0,Red,1,1);// 敌人voidTank::DrawTank()// 绘制坦克{inti;intnx,ny;if(Type==Red)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_RED);elseif(Type==Blue)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_BLUE);elseif(Type==Green)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_GREEN);elseif(Type==Normal)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREG R OUND_BLUE);for(i=0;i<6;i++){nx=hotpoint[0]+sharp[Direction][i*2]; ny=hotpoint[1]+sharp[Direction][i*2+1];SetPos((ny+1)*2,nx+1);// 利用sharp 数组相对于点x,y 绘制形状map[nx][ny]=ID;cout<<" ■ ";}}voidTank::Redraw()// 擦除坦克,原理同上{inti;intnx,ny;}for(i=0;i<6;i++){ nx=hotpoint[0]+sharp[Direction][i*2]; ny=hotpoint[1]+sharp[Direction][i*2+1];map[nx][ny]=Empty;SetPos((ny+1)*2,nx+1); cout<<"";}}intTank::Judge(intx,inty,intdir)// 判断当前是否可以绘制坦克{inti;intnx,ny;for(i=0;i<6;i++){ nx=x+sharp[dir][i*2]; ny=y+sharp[dir][i*2+1];if(nx<0||nx>=23||ny<0||ny>=23||map[nx][ny]!=Empty)// 不能绘制,返回 1 return1;return0;}voidTank::Running()// 坦克运行函数{intnewD;// 坦克的运行while(1){if(Life==0){EnemyExist=0;// 敌人不存在return;} if(GameOver==1)return;if(FireEnable==1&&GameOver==0)// 如果可以开火{WaitForSingleObject(Mutex,INFINITE);// 线程拥有互斥对象FireEnable=0;// 设为不可开火HANDLEbullet=CreateThread(NULL,0,Bulletfly,&ID,0,NULL);/ / 创建子弹线程}}}CloseHandle(bullet); ReleaseMutex(Mutex);// 释放互斥对象Sleep(100);}WaitForSingleObject(Mutex,INFINITE);// 线程拥有互斥对象srand((int)time(0));newD=rand()%4;if(newD==Up)// 随机出新的方向并重新绘制坦克{Redraw();if(Judge(hotpoint[0]-1,hotpoint[1],newD)==0){hotpoint[0]--;Direction=newD;}else{if(Judge(hotpoint[0],hotpoint[1],newD)==0) Direction=newD;elseif(newD==Down){Redraw();if(Judge(hotpoint[0]+1,hotpoint[1],newD)==0) {hotpoint[0]++; Direction=newD;}else{ if(Judge(hotpoint[0],hotpoint[1],newD)==0)Direction=newD;}}elseif(newD==Left){Redraw();if(Judge(hotpoint[0],hotpoint[1]-1,newD)==0) {hotpoint[1]--; Direction=newD;}else{if(Judge(hotpoint[0],hotpoint[1],newD)==0) Direction=newD; }}elseif(newD==Right){Redraw();if(Judge(hotpoint[0],hotpoint[1]+1,newD)==0){hotpoint[1]++;Direction=newD;}else{if(Judge(hotpoint[0],hotpoint[1],newD)==0) Direction=newD; }}if(GameOver==0&&Life!=0)DrawTank();ReleaseMutex(Mutex);// 释放互斥对象 Sleep(500-80*Speed);}}/*********************DWORDWINAPIBulletfly(LPVOIDlpParameter){int*ID=(int*)lpParameter;//ID 用来获取发射子弹坦克的 intPos[2];// 子弹活动点 intdirection; intSpeed; inttype;inthit=0;// 击中标记intoldx,oldy;// 旧活动点 intflag=0;// 子弹是否有移动的标记 if(*ID==Player)// 如果是玩家坦克 {type=PlayerBullet; direction=player.GetDirection(); Speed=player.GetFire(); Pos[0]=player.GetHotX(); Pos[1]=player.GetHotY();子弹线程函数IDelseif(*ID==Enemy)// 如果是敌人坦克{type=EnemyBullet;direction=enemy.GetDirection();Speed=enemy.GetFire();Pos[0]=enemy.GetHotX();Pos[1]=enemy.GetHotY();}if(direction==Up)// 根据坦克的位置和方向确定子弹的初始坐标{Pos[0]--;Pos[1]++;}elseif(direction==Down){Pos[0]+=3;Pos[1]++;}elseif(direction==Left)Pos[0]++;Pos[1]--;}elseif(direction==Right){{Pos[0]++;Pos[1]+=3;}// 子弹的运行while(1){WaitForSingleObject(Mutex,INFINITE);//这个不再注释了。
1数据处理系统一、软件开发目的该软件主要是使用C语言设计开发数据处理程序,实现对数据的排序、查找、插入、计算、输出等功能。
二、数据结构定义一个11*10的二维数组。
三、软件功能说明1.生成100个随机数:调用库函数rand()或random()产生100个随机数,并存储在二维数组中的前十行。
2.选择法排序:用选择法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
3.冒泡法排序:用冒泡法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
4.插入法排序:用插入法将数据由小到大排序输出,保存在数组中,按行优先的原则存放(将小数先存满第一行,然后第二行….)。
5.查找数据:输入待查找数据, 在二维数组中逐个查找,若找到输出数据所在位置的行列号,若无该数值则输出“无此数”。
6.转换二进制:将数组中数据转换为二进制并转存到另一数组中输出。
7.转换为素数之和:对于原数组中的数进行判断:若为偶数,则表示成两个素数的和,并输出。
8.插入数据:输入一个数,将该数插入原数组中,使数组中的数仍然按从小到大排序,将数组中数据按从小到大顺序输出。
9.删除数据输入一个数,若原数组中存在该数,则删除该数,使数组中的数仍然按从小到大排序,将数组中数据按从小到大顺序输出。
10.退出系统,结束任务。
四、软件验收标准1.有较为美观简洁大方的菜单,能保证用户方便、直观、快捷的熟悉并使用软件的各项功能。
系统菜单功能项:1生成100个随机数2选择法排序3冒泡法排序4插入法排序5查找数据6转换二进制7转换为素数之和8插入数据9删除数据10退出系统注意:要求每执行一个具体的功能之后,程序将重新显示菜单。
2.系统要有一定的可靠性、稳定性,能够实现各功能模块。
2图书借阅管理系统一、软件开发目的该软件主要是使用C语言设计开发一个简单的图书借阅管理系统,实现对图书的借书,还书的管理和数据统计。
精心整理C++大作业是男人就下100层编程实例打开VC++6.0,创建一个win32application工程,名字随便取,新建一个C++sourcefile文件复选添加到工程选项在C++sourcefile添加如下代码intTJieTi[DLou+1];//阶梯的个性数据constintVY_JieTi=5;constintRefreshTime=100;//刷新时间constintAY_Num=5;constintVX_Num=20;constintVY_TH=26;intzt=0;//游戏是否开始=0等待开始=1正在进行中=2结束了staticcharText[100];constintFixTime=12;//计算时间片intVX=0;//X方向速度constintManHeight=16;//角色的高度constintDYLou=5;//楼层Y方向均分数constintDJieTi=10;//每层分数constintDXJieTi=3;//阶梯X方向均分数constintVX_TS=3;intvx_ts=0;intLife=10;//角色的生命值intNum=0;intNum_time;staticHBITMAPRoleBmp;{hInst=hInstance;staticTCHARszAppName[]=TEXT("DisplayWithScrollBar"); staticTCHARszClassName[]=TEXT("DisplayWithscrlBarClass"); MSGmsg;WNDCLASSwndclass;wndclass.style=CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProc=WndProc;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hInstance=hInstance;//{}//hwnd=CreateWindow(szClassName,TEXT("是男人就下100层"),//创建窗口时,添加了WS_VSCROLL风格,以增加垂直滚动条WS_OVERLAPPEDWINDOW,50,100,420,571,NULL,NULL,//////{}returnmsg.wParam;}LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam) {RECTrect;staticHDChdc,hdc_Role,hdc_JieTi,hdc_lp,hdc_dz;staticHDCMemDC;PAINTSTRUCTps;inti,j;staticHPENhpen_black,hpen_blue,hpen_red,hpen_gray; staticHBRUSHhbrush_black,hbrush_blue,hbrush_red,hbrush_gray;{/*DChdc_dz=CreateCompatibleDC(hdc);MemDC=CreateCompatibleDC(hdc);/*初始化临时画布必须*/hMemBmp=CreateCompatibleBitmap(hdc,nClientWidth,nClientHeight); SelectObject(hdc_Role,hMemBmp);SelectObject(hdc_JieTi,hMemBmp);SelectObject(hdc_lp,hMemBmp);SelectObject(hdc_dz,hMemBmp);/*载入人物的图片*/RoleBmp=(HBITMAP)LoadImage(hInst,"Res\\man.bmp",DingZiBmp=(HBITMAP)LoadImage(hInst,"Res\\dingzi.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE);Init();return0;caseWM_PAINT:hdc=BeginPaint(hwnd,&ps);SelectObject(hdc,hpen_black);SetTextColor(hdc,RGB(207,49,211));SetBkMode(hdc,TRANSPARENT);sprintf(Text,"LIFE:%2d第%8d层,作者:核桃(QQ:)",Life,Num);/*/*/*ight,NULL);LineTo(hdc,GameWindowWidth-(GameWindowWidth-GameMainWidth)/2,GameWindowH eight);MoveToEx(hdc,(GameWindowWidth-GameMainWidth)/2,GameTopHeight,NULL);LineTo(hdc,GameWindowWidth-(GameWindowWidth-GameMainWidth)/2,GameTopHeig ht);MoveToEx(hdc,(GameWindowWidth-GameMainWidth)/2,GameWindowHeight-GameMain Height,NULL);LineTo(hdc,GameWindowWidth-(GameWindowWidth-GameMainWidth)/2,GameWindowH*//*/*{}{MoveToEx(hdc,(GameWindowWidth-GameMainWidth)/2+(i+1)*GameMainWidth/DJieT i,GameWindowHeight-GameMainHeight,NULL);LineTo(hdc,(GameWindowWidth-GameMainWidth)/2+(i+1)*GameMainWidth/DJieTi, GameWindowHeight);}*//*开始载入人物*/SelectObject(hdc_Role,RoleBmp);BitBlt(hdc,OManX,OManY,16,16,hdc_Role,0,0,SRCCOPY); /*开始载入左右边带动条*//*/*{if(CJieTi[i]==0){SelectObject(hdc_JieTi,JieTiBmp[0]);//BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);BitBlt(hdc,XJieTi[i],YJieTi[i],WJieTi[i],HJieTi[i],hdc_JieTi,0,0,SRCCOPY );}elseif(CJieTi[i]==1){);}{);}{SelectObject(hdc_JieTi,JieTiBmp[3]);//BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE);BitBlt(hdc,XJieTi[i],YJieTi[i],WJieTi[i],HJieTi[i],hdc_JieTi,0,0,SRCCOPY );elseif(CJieTi[i]==4){SelectObject(hdc_JieTi,JieTiBmp[4]);//BitBlt(MemDC,0,0,16,16,hdc_Role,0,0,NOTSRCERASE););}else{OPY);}}//释放ReleaseDC(hwnd,hdc_JieTi);ReleaseDC(hwnd,hdc_lp);ReleaseDC(hwnd,hdc_dz);ReleaseDC(hwnd,MemDC);if(zt==0)SetBkColor(hdc,RGB(0,0,0)); SetBkMode(hdc,OPAQUE);sprintf(Text,"按任意键开始游戏"); TextOut(hdc,125,250,Text,16);}{}//时间函数,重难点for(i=0;i<=DLou-1;i++){YJieTi[i]-=VY_JieTi;if(CJieTi[i]==3||CJieTi[i]==4)TJieTi[i]++;if(TJieTi[i]==3) TJieTi[i]=0;}}elseLife=0;/*最难的人物处理函数*/ IsJiaCeng();FixMan();if(Life==0)KillTimer(hwnd,1);zt=2;}InvalidateRect(hwnd,NULL,true);{zt=1;}{{caseVK_LEFT:VX=-VX_Num;break; caseVK_RIGHT:VX=VX_Num;break; }}return0;caseWM_KEYUP:switch(wParam){caseVK_LEFT:VX=0;break;caseVK_RIGHT:VX=0;break;}}}{inti;/*最难的碰撞部分已经解决*/for(i=0;i<DLou;i++){if(OManY+ManHeight<YJieTi[i]+VY_JieTi&&ManY+ManHeight>YJieTi[i]&&JiaoY== 0)JiaoX=OManX+int(float((YJieTi[i]+VY_JieTi-OManY-ManHeight)*(ManX-OManX)) /float(ManY-OManY+VY_JieTi));if(JiaoX>XJieTi[i]+WJieTi[i]||JiaoX+ManWidth<XJieTi[i]){JiaoX=0;}else{pz=i;}{{VY=10;AY=AY_Num;VX=0;pz=DLou;pztime=0;vx_ts=0;}else{AY=0;pz=i;}}}{}else{OManX=JiaoX; OManY=JiaoY; }if(pz!=DLou) on(pz);sprintf(Text,"%d%d",pz,CJieTi[pz]); return0;}/*步上阶梯的函数*/inton(intk){/*{{VY=0;pztime=0;}else{OManY=YJieTi[i]-ManHeight;VY=-VY_JieTi;AY=0;pz=i;pztime++;}}/*{AY=0;}/*{VY=-VY_JieTi;vx_ts=VX_TS;AY=0;}/*碰上弹簧,已经解决*/elseif(CJieTi[i]==1){OManY=YJieTi[i]-ManHeight; VY=-VY_TH;VX=0;}/*{AY=0;}/*碰上蓝色板部分,已经解决*/ else{OManY=YJieTi[i]-ManHeight; VY=-VY_JieTi;if(pztime==1&&Life>0&&Life<10) Life++;}return0;}/*{{{WJieTi[i]=WJieTi[i+1];CJieTi[i]=CJieTi[i+1];LJieTi[i]=LJieTi[i+1];TJieTi[i]=TJieTi[i+1];if(pz!=DLou&&pz>0)}j=rand()%DJieTi;if(j==0||j==1||j==2||j==3)CJieTi[DLou-1]=0;elseYJieTi[DLou-1]=YJieTi[DLou-2]+GameMainHeight/DLou; HJieTi[DLou-1]=GameMainHeight/(DYLou*DLou);WJieTi[DLou-1]=GameMainWidth*DXJieTi/DJieTi;if(CJieTi[DLou-1]==5)TJieTi[DLou-1]=rand()%10;TJieTi[DLou-1]=0; return1;}else}{{//{CJieTi[i]=0; elseif(j==4) CJieTi[i]=1; elseif(j==5) CJieTi[i]=2;elseif(j==6)CJieTi[i]=3;elseif(j==7)CJieTi[i]=4;else}//}//{///2;YJieTi[i]=GameWindowHeight-GameMainHeight+i*GameMainHeight/DLou+(DYLou-1 )*GameMainHeight/(DYLou*DLou);}/*计算出初始角色状态*/for(i=0;i<=3;i++){if(CJieTi[i+2]==0){OManX=XJieTi[i+2]+(WJieTi[i+2]-ManWidth)/2; OManY=YJieTi[i+2]-ManWidth;}//}/*VX=0;AY=0;/*for(i=0;i<=DLou;i++){if(CJieTi[i]==5)TJieTi[i]=rand()%10;elseTJieTi[i]=0;}Life=10;SetTimer(hwnd,1,RefreshTime,NULL);//设置刷新计时器return0;}。
C语言程序设计大作业设计报告一.设计方案本程序旨在用一个C语言程序实现简单的图书馆图书管理系统,程序包含平时的借书,还书,新书录入,查询功能,用简单明了的人机交互界面快速实现图书管理的目的。
二.模块说明及代码分析1.主函数:源代码:void main(){int a;printf("\n");printf("\n");printf(" ( ^_^ ) WELCOME!\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\t〉〉-------------BJTU图书管理系统--------------〈〈");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");printf("\n");do {printf("1.借书 2.还书 3.新书录入4.查询 0.退出");printf("\n");printf("\n");printf("\n");printf("\n");printf("请选择序号:");scanf("%d",&a);switch(a){case 1:jieshu();break;case 2:huanshu();break;case 3:xinshu();break;case 4:chaxun();break;case 0:break;default:printf("请选择正确的序号!\n");printf("\n");}}while(a!=0);printf("谢谢使用图书管理系统!\n");}主函数提供人机交互界面,让操作者选择所需的操作项目,并有退出选项。
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#define N 100void input();//添加新用户void amend();//修改用户信息void delete_client();//删除用户信息void search_client();//用户信息查询void collect_telephone();//所有用户信息void save_client(struct telephone message);//保存void search_name();//按用户名查询void search_telephone();//按电话号码查询void goodbye();//退出提示struct telephone{char client_name[20];char client_address[30];char client_telephone[15];};void main(){char choice[10]="";int len=0;while (choice[0]!='7'){system("cls");printf(" ◢◤〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓◥◣");printf("\n ◢◤〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓◥◣");printf("\n █===┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓┏┯┓===█");printf("\n █===┠欢┨┠迎┨┠使┨┠用┨┠电┨┠话┨┠管┨┠理┨┠系┨┠统┨===█");printf("\n █===┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛┗┷┛===█");printf("\n ◥◣〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓◢◤");printf("\n ◥◣〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓◢◤\n");printf(" ★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★≈★");printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");printf(" ┃| | | ┃\n");printf(" ┃ 1、 | 用户信息查询 | 2、 | 所有用户信息┃\n");printf(" ┃| | | ┃\n");printf(" ┃=========|════════════|========|════════════┃\n");printf(" ┃| | | ┃\n");printf(" ┃ 3、 | 删除用户信息 | 4、 | 添加用户┃\n");printf(" ┃| | | ┃\n");printf(" ┃=========|════════════|========|════════════┃\n");printf(" ┃| | | ┃\n");printf(" ┃ 5、 | 修改用户信息 | 6、 | 退出系统┃\n");printf(" ┃| | | ┃\n");printf(" 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");printf("\n 请选择(1-6):");scanf("%s",choice);len=strlen(choice);if (len>1){printf("\n 请输入1-6之间的整数\n");printf("\n 按回车键返回主菜单\n");getchar();getchar();continue;}switch (choice[0]){case '1':search_client();break;case '2':collect_telephone();break;case '3':delete_client();break;case '4':input();break;case '5':amend();break;case '6':goodbye();break;default:break;}}}//添加新用户void input(){struct telephone message;char reply='y';char save='y';while (reply=='y'){system("cls");printf("\n 用户姓名:");scanf("%s",message.client_name);printf("\n 家庭住址:");scanf("%s",message.client_address);printf("\n 电话号码:");scanf("%s",message.client_telephone);printf("\n 要保存吗?(y/n):");scanf(" %c",&save);if (save=='y'){save_client(message);}printf("\n 是否继续?(y/n):");scanf(" %c",&reply);}printf("\n 按回车键返回主菜单\n");getchar();getchar();}//保存void save_client(struct telephone message){FILE *fp;fp=fopen("message.dat","a+");if (fp!=NULL){fwrite(&message,sizeof(struct telephone),1,fp);}else{printf("\n 打开文件时出现错误,按回车键返回\n");getchar();return;}fclose(fp);}//修改用户信息void amend(){struct telephone message;FILE *fp;char amend_name[20];char reply='y';char found='y';char save='y';int size=sizeof(struct telephone);while (reply=='y'){found='n';fp=fopen("message.dat","r+w");if (fp!=NULL){system("cls");printf("\n 请输入你要修改的姓名:");scanf("%s",amend_name);while ((fread(&message,size,1,fp))==1){if ((strcmp(amend_name,message.client_name))==0){found='y';break;}}if (found=='y'){printf("\n 修改用户信息\n");printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓");printf("\n ┃用户姓名┃ %-16s┃",message.client_name);printf("\n ┃━━━━━━━━┃━━━━━━━━━━━━┃");printf("\n ┃家庭地址┃ %-16s┃",message.client_address);printf("\n ┃━━━━━━━━┃━━━━━━━━━━━━┃");printf("\n ┃电话号码┃ %-16s┃",message.client_telephone);printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");printf("\n 修改用户信息:\n");printf("\n 用户姓名:");scanf("%s",message.client_name);printf("\n 家庭住址:");scanf("%s",message.client_address);printf("\n 电话号码:");scanf("%s",message.client_telephone);printf("\n 是否保存?(y/n):");scanf(" %c",&save);if(save=='y'){fseek(fp,-size,1);fwrite(&message,sizeof(struct telephone),1,fp);}}else{printf("\n 无此信息!\n");}}else{printf("\n 打开文件时出现错误,按回车键返回\n");getchar();return;}fclose(fp);printf("\n 是否继续?(y/n):");scanf(" %c",&reply);}printf("\n 按回车键返回主菜单\n");getchar();getchar();}//删除用户信息void delete_client(){struct telephone message[N];struct telephone temp_str;struct telephone delete_str;int i=0,j=0;char reply='y';char found='y';char confirm='y';char delete_name[20];FILE *fp;while (reply=='y'){system("cls");fp=fopen("message.dat","r");if (fp!=NULL){i=0;found='n';printf("\n 请输入你要删除的姓名:");scanf("%s",delete_name);while ((fread(&temp_str,sizeof(struct telephone),1,fp))==1){if((strcmp(delete_name,temp_str.client_name))==0){found='y';delete_str=temp_str;}else{message[i]=temp_str;i++;}}}else{printf("\n 无此信息,按回车键返回\n");getchar();return;}fclose(fp);if (found=='y'){printf("\n 用户信息");printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓");printf("\n ┃用户姓名┃ %-16s┃",delete_str.client_name);printf("\n ┃━━━━━━━━┃━━━━━━━━━━━━┃");printf("\n ┃家庭地址┃ %-16s┃",delete_str.client_address);printf("\n ┃━━━━━━━━┃━━━━━━━━━━━━┃");printf("\n ┃电话号码┃ %-16s┃",delete_str.client_telephone);printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");}else{printf("\n 无此信息,按回车键返回\n");getchar();break;}printf("\n 确定要删除?(y/n):");scanf(" %c",&confirm);if (confirm=='y'){fp=fopen("message.dat","w");if (fp!=NULL){for(j=0;j<i;j++){fwrite(&message[j],sizeof(struct telephone),1,fp);}printf("\n 记录已删除\n");}else{printf("\n 打开文件时出现错误,按回车键返回\n");getchar();return;}fclose(fp);}printf("\n 是否继续?(y/n):");scanf(" %c",&reply);}getchar();}//用户信息查询void search_client(){int choice=1;while (choice!=3){system("cls");printf("\n 电话查询菜单\n");printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓");printf("\n ┃ 1 ┃按用户姓名查询┃");printf("\n ┃━━━━━━━━┃━━━━━━━━━━━━┃");printf("\n ┃ 2 ┃按电话号码查询┃");printf("\n ┃━━━━━━━━┃━━━━━━━━━━━━┃");printf("\n ┃ 3 ┃返回主菜单┃");printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");printf("\n 请选择(1-3):");scanf("%d%*c",&choice);if (choice>3){printf("\n 请输入1-3之间的整数(1-3)\n");printf("\n 按回车键返回");getchar();continue;}if (choice==1){search_name();}else if (choice==2){search_telephone();}}}//按用户名查询void search_name(){struct telephone message;FILE *fp;char amend_name[20];char reply='y';char found='y';while (reply=='y'){found='n';fp=fopen("message.dat","r+w");if (fp!=NULL){system("cls");printf("\n 请输入你要查的姓名:");scanf("%s",amend_name);while ((fread(&message,sizeof(struct telephone),1,fp))==1){if ((strcmp(amend_name,message.client_name))==0){found='y';break;}}if (found=='y'){printf("\n 用户信息\n");printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓");printf("\n ┃用户姓名┃ %-16s┃",message.client_name);printf("\n ┃━━━━━━━━┃━━━━━━━━━━━━┃");printf("\n ┃家庭地址┃ %-16s┃",message.client_address);printf("\n ┃━━━━━━━━┃━━━━━━━━━━━━┃");printf("\n ┃电话号码┃ %-16s┃",message.client_telephone);printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");}else{printf("\n 无此信息\n");}}else{printf("\n 打开文件时出现错误,按回车键返回\n");getchar();return;}fclose(fp);printf("\n 是否继续?(y/n):");scanf(" %c",&reply);}printf("\n 按回车键返回主菜单\n");getchar();getchar();}//按电话号码查询void search_telephone(){struct telephone message;FILE *fp;char telephone[20];char reply='y';char found='y';while (reply=='y'){found='n';fp=fopen("message.dat","r+w");if (fp!=NULL){system("cls");printf("\n 请输入你要查的电话号码:");scanf("%s",telephone);while ((fread(&message,sizeof(struct telephone),1,fp))==1){if ((strcmp(telephone,message.client_telephone))==0){found='y';break;}}if (found=='y'){printf("\n 用户信息\n");printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓");printf("\n ┃用户姓名┃ %-16s┃",message.client_name);printf("\n ┃━━━━━━━━┃━━━━━━━━━━━━┃");printf("\n ┃家庭地址┃ %-16s┃",message.client_address);printf("\n ┃━━━━━━━━┃━━━━━━━━━━━━┃");printf("\n ┃电话号码┃ %-16s┃",message.client_telephone);printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");}else{printf("\n 无此电话号码信息\n");}}else{printf("\n 打开文件时出现错误,按回车键返回\n");getchar();return;}fclose(fp);printf("\n 是否继续?(y/n):");scanf(" %c",&reply);}printf("\n 按回车键返回主菜单\n");getchar();}//显示所有用户信息函数void collect_telephone(){struct telephone message;FILE *fp;fp=fopen("message.dat","r");if (fp!=NULL){system("cls");printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓");printf("\n ┃用户姓名┃家庭地址┃电话号码┃");printf("\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");while ((fread(&message,sizeof(struct telephone),1,fp))==1){printf(" ┃%-16s┃%-16s┃%-16s┃",message.client_name,message.client_address,message.client_telephone);printf("\n ┃━━━━━━━━┃━━━━━━━━┃━━━━━━━━┃\n");}}else{printf("\n 打开文件时出现错误,按回车键返回\n");getchar();return;}fclose(fp);printf("\n 按回车键返回主菜单\n");getch();}//退出函数void goodbye(){char c;printf(" 真的退出?(y/n):");getchar();if(c=='y'||c=='Y'){system("cls");exit(0);}elseif(c=='n'||c=='N'){printf("\n 按回车键返回\n");getch();}}。
#include<stdio.h>#include<string.h>#include<stdlib.h> //exit()的头文件#include<conio.h> //屏幕操作函数#define N 100 //控制学生记录的容量#define M 3 //控制课程数#define LEN 9void menu();void browse();typedef struct student //定义学生结构体{char num[11]; //把学号定义成字符数组类型,一来学号可能比较长,二来可直接用strcmp来比较,确保无雷同char name[20];int score[M];double ave;}STU;STU stu[N]; //定义一个外部学生结构体变量/*****以写的方式保存数据到文件的函数【原数据将被覆盖】*****/int save(int n) //保存函数,保存n个记录{FILE *fp;int i;if((fp=fopen("zhouhao.txt","wb"))==NULL)//以二进制写的方式打开,在此前的记录被覆盖{printf("无法打开文件!\n任意键退出程序... ...\n");getch(); //预防闪屏return 0;}for(i=0;i<n;i++)if(stu[i].ave!=0) //在后面的del()函数中通过将stu[i].ave=0来表示该记录被删除了if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)//开始写入文件printf("文件写入发生错误\n");fclose(fp);return 0; // 注意下这个地方,我只是随便赋的值,只是为了消除一个警告}/********【拷贝函数单纯的将一个文件拷贝到另一个文件中】*******/void copy(){char outfile[20],infile[10]; //保存源文件名和目标文件名FILE *sfp,*tfp; //定义指向源文件(sourcefile)和目标文件(targetfile)的指针STU *p=NULL; //定义临时指针,暂存读出的记录system("CLS"); //清屏;printf("请输入需要被复制的文件名(默认数据处理在zhouhao.txt中):\n");scanf("%s",infile); //输入源文件名if((sfp=fopen(infile,"rb"))==NULL)//以二进制方式打开源文件{printf("无法打开文件!\n任意键退出程序... ...\n");//显示不能打开文件的信息getch();return;}printf("另存为...,比如:hao.txt:\n"); //提示输入目标文件名scanf("%s",outfile); //输入目标文件名if((tfp=fopen(outfile,"wb"))==NULL)//以二进制写方式打开目标文件{printf("无法打开文件!\n\n");//显示不能打开文件的信息getch();return; //退出程序,同exit(0)}while(!feof(sfp)) //读文件直到文件尾fputc(fgetc(sfp),tfp); //从stp复制文件到tfpfclose(sfp); //关闭源文件fclose(tfp); //关闭目标文件printf("\n复制成功!!!\n"); //显示拷贝成功信息printf("\n输入任意键返回主菜单");getch();menu();}/***【加载记录或可以计算记录个数的函数】***/int load(){FILE *fp;int i;if((fp=fopen("zhouhao.txt","rb"))==NULL) //以二进制读的方式打开{printf("无法打开文件!\n任意键退出程序... ...\n"); //显示不能打开文件的信息getch(); //预防闪屏return 0;}for(i=0;!feof(fp);i++)fread(&stu[i],sizeof(struct student),1,fp); //将文件数据读入学生结构体fclose(fp);return(i-1); //返回目前总的记录个数,注意是i-1}/***【一个任务结束时的选择浏览还是返回的函数】***/void printf_back(){int w;printf("\n\t操作成功!^_^\n");printf("\t接着干什么?\n\t1).立刻浏览全部数据\t2).返回:[ ]\b\b");scanf("%d",&w);if(w==1)browse();elsemenu();}/***【显示数据结构项目函数】***/void printf_face(){printf("\n\t学号\t姓名\t\t 数学\t 英语C语言平均分\n"); //显示行头}/***【求平均分函数】因为后面在修改数据中要专门重算平均数***/void average(int i){int j,sum;for(sum=0,j=0;j<M;j++)sum+=stu[i].score[j];stu[i].ave=sum*1.0/M;}/*******【学号长度处理函数】********/void no_deal(int i){int j,l,a;l=strlen(stu[i].num);if(l<LEN){for(j=LEN-l,a=0;j<LEN;j++){stu[i].num[j]=stu[i].num[a++];}stu[i].num[i]='\0';for(a=0;a<LEN-l;a++)stu[i].num[a]='0';}if(l>LEN)stu[i].num[l]='\0';}/*******【学号输入函数】*******/int no_input(int i,int n) //i表示第i个学生信息,n表示比较到第n个学生{int j,k,w1;do{w1=0;printf("学号:\t\t 【%d位,低于%d位前面补0,长的截尾处理!】\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",LEN,LEN);scanf("%s",stu[i].num);no_deal(i);for(j=0;stu[i].num[j]!='\0';j++) //学号输入函数,作了严格的规定if(stu[i].num[j]<'0' || stu[i].num[j]>'9') //判断学号是否为数字{puts("别开玩笑!只能输入0——9.好吧,再给你一次机会,别让我失望!\n");w1=1; //这个w1=1,表示学号中输入了不是数字的字符break;}if(w1!=1) //w1!=1,确保验证时学号已经是由0-9的数组成的for(k=0;k<n;k++) //比较到第n个学生if(k!=i && strcmp(stu[k].num,stu[i].num)==0)//判断学号是否有雷同{puts("已经存在啦!重来一次!\n");w1=1; //w1=1,表示学号存在雷同break;}}while(w1==1); //总之,w1=1代表学号输入又问题,要重新输入return 0;}/***【分数输入函数】***/int score_input(int i){int j;for(j=0;j<M;j++){printf("分数%d:",j+1);scanf("%d",&stu[i].score[j]);}return 0;}/***【输入一整条记录的函数】***/void input(int i){no_input(i,i); //调用输入学号的函数printf("姓名:");scanf("%s",stu[i].name); //输入姓名score_input(i); //输入分数average(i); //计算平均分}/***【显示一整条记录的函数】***/void printf_one(int i){int j;printf("%11s %-14s",stu[i].num,stu[i].name); //输出学号和姓名for(j=0;j<M;j++)printf("%9d",stu[i].score[j]); //输出分数printf(" %9.2f\n",stu[i].ave); //输出平均分}/*【显示----函数顶部】*/void topput___(){printf("\n 记录浏览");printf("\n--------------------------------------------------------------------------------\n");}/*【显示----函数底部】*/void puts___(){printf("\n\n--------------------------------------------------------------------------------\n");}/*【修改记录函数】*/int modify_data(int i,int n) //修改数据函数,修改第i个记录{int c,w1;do{puts("\n你想修改什么: =>\n\n1).学号\t2).姓名\t3).数学\t4).英语\t5).C语言\n6).重输所有分数\t7).重输所有记录\t8).取消并返回");printf("想好就输,快:[ ]\b\b");scanf("%d",&c);if(c>8 || c<1)puts("\n选择失误!严肃点,再来一次!");//判断选择是否错误,若是则重新选择getchar(); //当输入时字符时可以防止死循环,觉得这个很重要,老师也没提过}}while(c>8 || c<1);do{switch(c) //选择要修改的项目{case 1:no_input(i,n);break;case 2:printf("姓名:");scanf("%s",stu[i].name);break;//调用学号输入函数case 3:printf("数学:");scanf("%d",&stu[i].score[0]);break;case 4:printf("英语:");scanf("%d",&stu[i].score[1]);break;case 5:printf("C语言:");scanf("%d",&stu[i].score[2]);break;case 6:score_input(i);break;case 7:input(i);break;case 8:menu(); //break; 在最后,有没有无所谓}if(c>2 && c<7)average(i); //由于3,4,5,6项改变的同时也把平均分动了,必须修正一下puts("\n现在:\n");printf_face();printf_one(i); //显示修改后的数据printf("\n你确定你目前的决定?\n\n\t1).当然啦! \t2).不不不,重修改一下!\n\t3).算了还是走吧,别保存了![ ]\b\b");//是否确定scanf("%d",&w1); //选择2则表示这次修改错误要重新修改}while(w1==2);return w1; //返回控制值}/* * * * * * * * * * * * 输入模块* * * * * * * * * * * */void enter(){int i,n;system("CLS"); //引用外部清屏,clrscr()在VC++中不好用printf("输入你要记录的学生数吧:(1~%d)?\t['0'返回]:\n",N);scanf("%d",&n); //要输入的计入个数if(n==0)menu(); //输0 的时候返回else{printf("\n\t好的!开始输入...\n");for(i=0;i<n;i++)printf("\n请输入第%d个的记录.\n",i+1);input(i); //调用输入函数}if(i!=0)save(n); //调用保存函数printf_back();} //一个任务结束时让用户选择是浏览还是返回}/*******************************追加模块*************************************/ int add(){int i,n,m,k;FILE *fp;system("CLS");n=load(); //获得总记录的个数,并加载记录printf("你需要加入多少学生:(0 ~ %d)?:",N-n);scanf("%d",&m); //输入要追加记录的个数if(m==0)menu();else{k=m+n;for(i=n;i<k;i++){printf("\n请输入第%d个的记录.\n",i-n+1);input(i); //调用输入函数}if((fp=fopen("zhouhao.txt","ab"))==NULL)//以ab方式打开,追加保存{printf("文件打不开!\n"); //显示不能打开文件的信息getch();return 0;}for(i=n;i<k;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf("文件写入错误!\n");fclose(fp);printf_back(); //一个任务结束时让用户选择是浏览还是返回}return 0;}/***************************** 修改模块*************************/{struct student s;int i,n,k,w0=0,w1,w2=0;n=load(); //获得总记录的个数,并加载记录do{system("CLS");k=-1;/*****给用户看所有的记录以便用户确认要修改的记录*****/topput___();printf_face();for(i=0;i<n;i++)printf_one(i); //调用显示一个记录的函数puts___();/*****给用户看所有的记录以便用户确认要修改的记录*****/do{printf("\n\n输入你要修改记录的学号! 学号. :\t【'Ctrl-z' 退出】");if(scanf("%s",s.num)!=1) //输入要修改数据的学号menu();for(i=0;i<n;i++) //查找要修改的数据if(strcmp(s.num,stu[i].num)==0){k=i; //找到要修改的记录s=stu[i]; //把stu[i](即把当次修改的学生记录)备份给s,以便用户反悔时恢复}if(k==-1)printf("\n\n不存在! 请重新输入~");}while(k==-1); //当K=-1表示没有找到printf_face(); //调用显示数据结构项目函数printf_one(k); //显示查找的记录w1=modify_data(k,n); //修改学生记录并且返回保存控制值w1,w1=1则表示用户已确认修改[w1只能是1或3(1代表确认修改,3代表不保存返回)] if(w1==1) //w1=1代表确认修改{printf("\n操作成功!\n\n决定修改别的吗?\n\n\t1).是的\t2).不!保存并返回\t[ ]\b\b");scanf("%d",&w0);w2=1; //来控制保存,使w2=1是标记已有过修改}else //此时w1=3,表示不保存返回{w0=0;if(w2==1) //w2=1表示已有过修改stu[k]=s; //反悔了,将修改前的值复原}if(w0!=1 && w2==1) //w0不等于1则表示正常返回,w2=1表示在此之前有修改过,这时就保存用户已确认修改的并返回save(n); //w2不等于1表示在此之前没有修改过,而又反悔这次修改,则不保存,保存时覆盖原先数据}while(w0==1);menu(); //返回主菜单}/*******************************删除模块*************************/void del(){struct student s;int i,k,n,c,w0=1;system("CLS");n=load(); //获得总记录的个数,并加载记录do{system("CLS");k=-1;/*给用户看全部记录以便确认要删除的记录*/topput___();printf_face(); //调用显示数据结构项目的函数for(i=0;i<n;i++)if(stu[i].ave!=0)printf_one(i); //显示所有数据puts___();/*给用户看全部记录以便确认要删除的记录*/do //输入要删除记录的学号,并寻找{printf("\n\n输入你要删除记录的学号! NO.:\t【'Ctrl-z' 退出】");if(scanf("%s",s.num)!=1)menu();for(i=0;i<n;i++)if(strcmp(s.num,stu[i].num)==0){k=i; //重赋k值表示找到寻找的数据s=stu[i];}if(k==-1) //k=-1表示没找到相同的printf("\n\n不存在! 请重新输入!");}while(k==-1);puts("\n");printf_face();printf_one(k); //显示要删除的记录printf("\n你确定?\n\t1).确定2).不,我要删除其他的3).不保存退出[ ]\b\b");//给用户一次反悔的机会scanf("%d",&c);if(c==1){stu[k].ave=0; //这是很重要的,通过stu[k].ave=0,通知保存的时候忽略掉,不进行保存printf("\n\n操作成功!\n\n要继续删数据吗?\n\t1).继续2).返回主菜单\t[ ]\b\b");scanf("%d",&w0);}if(c==3)w0=0; //w0=0不删除直接返回if(w0!=0 && c!=3) //只有当确认删除后返回才保存,不删除直接返回则不保存,且不保存在此之前删除过的记录save(n);}while(w0==1);menu();}/**************************************浏览(全部)模块*****************************************/void browse(){int i,n;n=load(); //获得总记录的个数,并加载记录system("CLS");topput___();printf_face(); //调用显示数据结构项目的函数for(i=0;i<n;i++) //循环输出所有学生的信息printf_one(i);puts___();printf("\n\t 这里一共有%d 个记录!\n",n);printf("\n\t 输入任意键返回主菜单... ...");getch();menu();}/*******************************查找模块************************************/ void search(){int i,n,k,w1=1,w2,w3,w4;struct student s;system("CLS");n=load(); //获得总记录的个数,并加载记录do{do{k=-1;printf("\n\n输入你要查找记录的主人公! 姓名:");scanf("%s",);printf_face();for(i=0;i<n;i++)if(strcmp(,stu[i].name)==0){k=i;printf_one(k); //考虑到同名的情况,可能输出不只一个,把所有的记录都查找一下}if(k==-1) //k=-1表示没找到相同的{printf("\n\n不存在! 请重新输入!");printf("\n\n要继续吗?\n\t1).继续\t 2).不,我要返回\t[ ]\b\b");scanf("%d",&w1);}}while(k==-1 && w1!=2); //k=-1表示没找到要查找的对象,w1!=2表示继续查找w4=w3=0; //初始化w4=w3=0if(k!=-1){printf("\n\n接着干什么?\n\t1).再次查找2).修改3).删除4).返回主菜单[ ]\b\b");scanf("%d",&w2);switch(w2){case 2:w3=modify_data(k,n);break;case 3:{printf("\n\n你确定了吗?\n\t1).确定2).不,还是返回吧! \t[ ]\b\b");scanf("%d",&w4);if(w4==1) //w4=1,表示确定删除stu[k].ave=0; //表示删除,当stu[k].ave=0,在save()中就不保存该数据,表示删除break;}}if(w3==1 || w4==1){save(n);printf("\n\n操作成功!");printf("\n\n接着干什么?\n\t1).再次查找2).返回[ ]\b\b");scanf("%d",&w2);}}}while(w2==1);menu();}/*******************************排序模块(按平均成绩)*********************************/void order(){int i,j,k,n;struct student s;system("CLS"); //清屏n=load(); //获得总记录的个数,并加载记录for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(stu[j].ave>stu[k].ave) //选择法排序,按平均分降序k=j;s=stu[i];stu[i]=stu[k];stu[k]=s;}save(n);puts("\n\n");printf_back();}/**********************************主界面************************************/ void menu(){int n,w1;do{system("CLS");;puts("\n\t\t\t\t学生信息管理系统\n");puts("\t ------- 周浩\n");puts("\t ************************ 主菜单*********************\n\n");puts("\t\t\t 1.初始数据输入(会覆盖已有数据)");puts("\t\t\t 2.可选择个数的数据添加");puts("\t\t\t 3.数据部分修改");puts("\t\t\t 4.数据部分删除");puts("\t\t\t 5.数据查看与浏览");puts("\t\t\t 6.数据查找(按姓名)");puts("\t\t\t 7.数据排序(按平均分降序)");puts("\t\t\t 8.已有文件文件拷贝");puts("\t\t\t 0.退出系统");puts("\n\n\t ****************************************************\n");printf("\t输入你的选择(0~8):[ ]\b\b");scanf("%d",&n);if(n<0 || n>8){w1=1;printf("\t你的选择不再0 到8 之间,按任意键重新输入!");getch();}elsew1=0;}while(w1==1);switch(n){case 1:enter();break;case 2:add();break;case 3:modify();break;case 4:del();break;case 5:browse();break;case 6:search();break;case 7:order();break;case 8:copy();break;case 0:exit(0);break;}}/************************************主函数***************************************/void main(){menu();}。
《探究C语言中while语句写月历程序的深度与广度》近年来,随着计算机编程领域的迅速发展,C语言作为一门经典而重要的编程语言,一直备受关注。
而在C语言的学习过程中,编写月历程序作为一个经典的大作业也备受关注。
本文将深入探究C语言中使用while语句来写月历程序的深度与广度,并将共享个人观点和理解。
1. 月历程序的基本概念我们需要明确月历程序的基本概念。
月历程序是指能够输出指定年份指定月份的日历的程序,它需要考虑到每个月的天数以及每周的起始日期等因素。
在C语言中,我们通常使用while循环来实现这一功能,月历程序也成为了C语言中while语句的一个经典应用之一。
2. 深度探究while语句的使用接下来,我们将深度探究while语句在月历程序中的使用。
使用while 语句编写月历程序需要考虑到很多细节,例如如何确定每个月的天数、如何输出日历表格等。
在这个过程中,我们需要使用while循环来处理每个月的天数,同时不断更新日期,直到输出完整的日历。
这种深度的应用不仅考验了编程者对while语句的掌握程度,同时也需要考虑到程序的效率和可读性。
3. 广度展示月历程序的实现除了深入探究while语句的使用外,我们也需要广度展示月历程序的实现。
月历程序需要考虑到用户输入的年份和月份,因此我们需要使用while循环来不断接收用户输入,并根据用户的指定日期来输出对应的月历。
在这个过程中,我们还需要考虑到用户可能的非法输入以及程序的健壮性等方面。
月历程序的实现不仅需要考虑到核心的日历输出功能,同时也需要考虑到程序的用户友好性和稳定性。
4. 个人观点与理解我想共享一下我的个人观点与理解。
在学习C语言过程中,通过编写月历程序来深入理解while语句的使用,不仅能够提升编程能力,同时也能够锻炼我们对细节的处理能力和对程序整体结构的把握能力。
在实际应用中,while语句作为一个重要的循环结构,能够为我们解决很多实际问题,并且在不断实践中提升我们的编程水平。