收藏 分销(赏)

数据结构课设任务书.doc

上传人:快乐****生活 文档编号:2354903 上传时间:2024-05-28 格式:DOC 页数:31 大小:1.12MB 下载积分:12 金币
下载 相关 举报
数据结构课设任务书.doc_第1页
第1页 / 共31页
数据结构课设任务书.doc_第2页
第2页 / 共31页


点击查看更多>>
资源描述
______________________________________________________________________________________________________________ 课 程 设 计 报 告 课程名称 数据结构 课题名称1.通讯录管理 2.迷宫求解 专 业 计算机科学与技术 班 级 1381 学 号 201313030120 姓 名 杨承志 指导教师 刘铁武 刘杰君    2015年 7月 5日 湖南工程学院 课 程 设 计 任 务 书 一.设计目标 强化学生编码、调试错误的能力;了解和掌握数据结构相关技术、并合理利用其解决实际应用问题;了解软件开发的流程和项目管理控制;掌握企业级IDE的使用 ;了解当前IT行业及职业人应具备的素质;完全模拟真实软件开发流程和管理;增强团队意识和团队合作精神。 二.设计内容: 问题1:拓扑排序 大学期间各专业都要制订相应的教学计划。每个专业开设的课程预先已确定。而各门课程间有的是相互独立的,而有的则有先修后修的限定。试设计相应的课程设置程序,实现对某专业各学期的课程的排布,其中每门课需设定课时,而各学期的总课时不能超过上限。 测试数据:学期课时上限数:350 ;各课程所需学时:48;课程先、后修关系如图: 1 9 4 2 12 10 11 3 6 5 7 8 问题2:huffman编码 对于确定的字符集的电文字符串编码,实现最高的通信效率。编程实现对于给定的输入串及各字符的已知频度,输出其编码方式(各字符的二进制编码)及对应的输出流。 测试数据: 字符 A B C D E F G H I J K L M 频度 186 64 13 22 32 103 21 15 47 57 1 2 32 字符 N O P Q R S T U V W X Y Z 频度 20 57 63 15 1 48 51 80 23 8 18 1 16 问题3:成绩管理 编制一应用软件实现对班级成绩管理。基本功能有学生信息的增删(转入或退学)、查找(从当前点向前或向后双向的)、录入、统计(如总分,及格率等)。建议用双链表实现。 问题4:成绩排序 对某次考试成绩排序,输入为多门课程成绩,可以任一课程成绩为关键字进行检索。建议采用快速排序等算法效率高的算法。 问题5:迷宫求解 一个M*N的长方阵迷宫,0和1分别表示迷宫中的通路和墙壁。对任意设定的迷宫,东、南、西、北四个方向是可能的行走方向。求出一条从入口到出口的路径。(或没有通路)。 测试数据: 迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 0 0 0 问题6:一元多项式计算。 对于任意输入的多项式A=anxn+an-1xn-1+…a1x+a0和B=bmxm+bm-1xm-1+…b1x+b0,用链表存储后实现A+B;A-B。 测试数据: a.; b.; c.; d.; e. ; 问题7: 通讯录管理 设计一个通讯录管理,包括通讯录链表的建立、通讯者的插入、通讯者的删除、通讯者的查询以及信息修改等。 要求有运行界面,从菜单中进入选项。 三.设计要求: 1.选题:每位学生需完成两个课题,其中一个必选,另一个自选,必选题次为,学号/7+1。 2.课程设计报告内容说明 1)需求分析 程序的功能;输入输出的要求。 2)概要设计 程序的模块构成以及模块之间的层次结构、各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。 3)详细设计 采用C语言定义相关的数据类型;写出各模块的类C码算法;画出各函数的调用关系图、主要函数的流程图。 4)调试分析以及设计体会 测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。 5)使用说明 用户使用手册:说明如何使用你编写的程序,详细列出每一步的操作步骤。 6)书写格式 见附带说明。 7)附录 参考书目; 源程序清单(带注释) 3.成绩评定: 指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体考核标准包含以下几个部分:① 平时出勤 (占10%)② 系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)③ 程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)④ 设计报告(占30%)注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。⑤ 独立完成情况(占10%)。 四.进度安排 第 17周 星期一 星期二 星期三 星期四 星期五 上午 9:00~12:00 下午 13:30~16:30 E512 E411 E414 E414 第 18周 星期一 星期二 星期三 星期四 星期五 上午 9:00~12:00 下午 13:30~16:30 E412 E413 附: 课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。 正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。 正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。 正文总字数要求在5000字以上(不含程序原代码)。 目录 一,通讯录管理系统 1. 需求分析 2. 概要设计 3. 详细设计 4. 调试分析 二,迷宫求解 1. 问题描述 2. 需求分析 3. 概要设计 4. 流程图 5. 详细设计 6. 调试分析 三,课程设计总结 四,附录 通讯录管理系统 1,需求分析 设计一个实用的小型通讯录,用双向链表做数据结构,编写一个通讯录管理系统实现通讯录信息的输入、添加、显示、以姓名做关键字进行查找、删除信息等功能。每条信息至少包含:姓名、街道、城市、邮编、国家等信息。 2,概要设计 载入文件load(): 将磁盘中可能存在的文件载入到内存中。 信息输入enter(): 系统将提示输入新纪录所需信息,信息包含:姓名、街道、城市、邮编、国家。 信息删除del(): 首先提示用户输入要删除的纪录姓名,然后调用删除函数,删除该纪录的相关 资料,支持重名选择删除和循环删除。 查找search(): 提示用户输入要查找的姓名,然后系统调用查找函数查找,接着系统使用相关 命令输出查到的全部信息。 显示全部display(): 将内存中的纪录内容全部输出,包括未保存到磁盘的记录项。 保存save(): 将操作结果实时保存到磁盘文件txl.txt中,完成后返回到主菜单界面。 退出系统exit(0): 直接退出系统,不保存修改。 流程图: 3,详细设计 1. 各个操作的算法实现: (1)链表初始化 void initlist()//链表初始化函数 { l=(linklist)malloc(sizeof(pnode));//动态申请内存 l->next=l; l->prior=l;} (2)载入可能存在的通讯录文件 void load()//装载已有文件信息 { //无文件,新建立文件 ……; ……;//已有文件,导入文件 ……; ……;} (3)增加新结点 void listinsert()//增加新结点 { //插入新结点,读入内存信息 ……; ……;} (4)添加新纪录(可循环) void enter()//添加新纪录 { //信息输入 ……; ……; //是否继续添加? ……; ……; } (5) 按姓名查找(同时显示全部符合要求的结果,包括没有保存到磁盘的) void search() { //输入姓名 ……; ……;//输出查询结果 ……; ……;//检索可能的重名纪录 ……; ……;} (6) 显示所有记录(包括没有保存到磁盘的) void display()//显示所有纪录 { //显示内存中的所有记录 ……; ……;} (7) 删除指定记录(可循环) void del() //删除纪录 { //输入要删除的姓名 ……; ……;//查找符合条件的记录,对于每条记录询问是否删除; //满足条件的输出结束,询问是否删除其他记录,循环 ……; ……;} (8) 保存到磁盘文件(实时写入文件) void save()// { //写入文件操作 ……; ……;} 3,调试分析 程序主界面 新增联系人 现实所有联系人 查找联系人 经过反复测试,最终提供了一个较为友好的界面和操作模式,而且容错能力较好,稳定性很强。下面做一些简单的说明: (1)2级菜单只是作为一种尝试,并非必须! (2) 在界面排版上,我学习了互联网上部分程序的界面编排,其中以格式控制方式显示提 高了界面显示的稳定性,较为理想。 (3) 在文件读取和保存方面,该程序做到了实时保存保存和读取,操作非常简便。 (4) 在查找方面,我将其设计为一次多记录的显示方式,也更合乎操作习惯,界面较为友 好,对于无符合条件的结果,只是结果集为空,界面保持不变。同时,它是实时读取 的,可以将刚刚输入而未保存的记录也读取到!另外,一次查询结束后返回的是查询 菜单,可以直接进行下一次的查询,也较为合理。 (5) 删除功能我做了较多的工作,整体界面和设计都较为合理。对于输入的姓名,查找出 结果后提示是否删除。若有重名,则会二次显示,提示是否删除,一直到所有记录查询 结束(可以在重名中选中需要的进行删除,并不需要删除每一个纪录)。结束之后可以 直接再次删除其他纪录,因为它提供循环删除操作功能。 迷宫求解 问题描述: a.问题描述:以一个m * n的长方阵表示迷宫,0和1分别表示迷宫的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 b.基本要求 : (1)实现一个以链表做存储的栈类型,然后编写一个求解迷宫的非递归程序。求的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如:对于下列数据的迷宫,输出一条通路:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2)……。 (2)编写递归形式的算法,求得迷宫中所有可能的道路; (3)以方阵形式输出迷宫及其到道路(选做) c.测试数据:迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 0 0 0 d.实现提示:计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着米一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求的一条通路。假如所有的可能的通路都探索到而未能到出口,则所设定的迷宫没有通路。可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。为处理器方便起见,可在迷宫的四周加上一圈障碍 。对于迷宫中任一位置,均可约定有东、西、南、北四个方向可通。 需求分析: 本课程设计是解决迷宫求解的问题,从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中要应用“栈”的思想假设“当前位置”指的是“在搜索过程中的某一时刻所在图中某个方块位置”,则求迷宫中一条路径的算法的基本思想是:若当前位置“可通”,则纳入“当前路径”,并继续朝“下一位置”探索,即切换“下一位置”为“当前位置”,如此重复直至到达出口;若当前位置“不可通”,则应顺着“来向”退回到“前一通道块”,然后朝着除“来向”之外的其他方向继续探索;若该通道块的四周4个方块均“不可通”,则应从“当前路径”上删除该通道块。所谓“下一位置”指的是当前位置四周4个方向(上、下、左、右)上相邻的方块。假设以栈记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。由此,“纳入路径”的操作即为“当前位置入栈”;“从当前路径上删除前一通道块”的操作即为“出栈”。 概要设计 1.①构建一个二维数组maze[M+2][N+2]用于存储迷宫矩阵 ②自动或手动生成迷宫,即为二维数组maze[M+2][N+2]赋值 ③构建一个队列用于存储迷宫路径 ④建立迷宫节点struct point,用于存储迷宫中每个节点的访问情况 ⑤实现搜索算法 ⑥屏幕上显示操作菜单 2.本程序包含10个函数: (1)主函数 main() (2)手动生成迷宫函数 shoudong_maze() (3)自动生成迷宫函数 zidong_maze() (4)将迷宫打印成图形 print_maze() (5)打印迷宫路径 (若存在路径) result_maze() (6)入队 enqueue() (7)出队 dequeue() (8)判断队列是否为空 is_empty() (9)访问节点 visit() (10)搜索迷宫路径 mgpath() 流程图: 详细设计 实现概要设计中定义的所有数据类型及操作的伪代码算法 1. 节点类型和指针类型 迷宫矩阵类型:int maze[M+2][N+2];为方便操作使其为全局变量 迷宫中节点类型及队列类型:struct point{int row,col,predecessor} que[512] 2. 迷宫的操作 (1)手动生成迷宫 void shoudong_maze(int m,int n) {定义i,j为循环变量 for(i<=m) for(j<=n) 输入maze[i][j]的值 } (2)自动生成迷宫 void zidong_maze(int m,int n) {定义i,j为循环变量 for(i<=m) for(j<=n) maze[i][j]=rand()%2 //由于rand()产生的随机数是从0到RAND_MAX,RAND_MAX是定义在stdlib.h中的,其值至少为32767),要产生从X到Y的数,只需要这样写:k=rand()%(Y-X+1)+X; } (3)打印迷宫图形 void print_maze(int m,int n) {用i,j循环变量,将maze[i][j]输出 □、■} (4)打印迷宫路径 void result_maze(int m,int n) {用i,j循环变量,将maze[i][j]输出 □、■、☆} (5)搜索迷宫路径 ①迷宫中队列入队操作 void enqueue(struct point p) {将p放入队尾,tail++} ②迷宫中队列出队操作 struct point dequeue(struct point p) {head++,返回que[head-1]} ③判断队列是否为空 int is_empty() {返回head==tail的值,当队列为空时,返回0} ④访问迷宫矩阵中节点 void visit(int row,int col,int maze[41][41]) {建立新的队列节点visit_point,将其值分别赋为row,col,head-1,maze[row][col]=2,表示该节点以被访问过;调用enqueue(visit_point),将该节点入队} ⑤路径求解 void mgpath(int maze[41][41],int m,int n) {先定义入口节点为struct point p={0,0,-1},从maze[0][0]开始访问。如果入口处即为障碍,则此迷宫无解,返回0 ,程序结束。否则访问入口节点,将入口节点标记为访问过maze[p.row][p.col]=2,调用函数enqueue(p)将该节点入队。 判断队列是否为空,当队列不为空时,则运行以下操作: { 调用dequeue()函数,将队头元素返回给p, 如果p.row==m-1且p.col==n-1,即到达出口节点,即找到了路径,结束 如果p.col+1<n且maze[p.row][p.col+1]==0,说明未到迷宫右边界,且其右方有通路,则visit(p.row,p.col+1,maze),将右边节点入队标记已访问 如果p.row+1<m且maze[p.row+1][p.col]==0,说明未到迷宫下边界,且其下方有通路,则visit(p.row+1,p.col,maze),将下方节点入队标记已访问 如果p.col-1>0且maze[p.row][p.col-1]==0,说明未到迷宫左边界,且其左方有通路,则visit(p.row,p.col-1,maze),将左方节点入队标记已访问 如果p.row-1>0且maze[p.row-1][p.col]==0,说明未到迷宫上边界,且其上方有通路,则visit(p.row,p.col+1,maze),将上方节点入队标记已访问}访问到出口(找到路径)即p.row==m-1且p.col==n-1,则逆序将路径标记为3即maze[p.row][p.col]==3; while(p.predecessor!=-1) {p=queue[p.predecessor]; maze[p.row][p.col]==3;} 最后将路径图形打印出来。 3.菜单选择 while(cycle!=(-1)) 手动生成迷宫 请按:1 自动生成迷宫 请按:2 退出 请按:3 scanf("%d",&i); switch(i) { case 1:请输入行列数(如果超出预设范围则提示重新输入) shoudong_maze(m,n); print_maze(m,n); mgpath(maze,m,n); if(X!=0) result_maze(m,n); case 2 :请输入行列数(如果超出预设范围则提示重新输入) zidong_maze(m,n); print_maze(m,n); mgpath(maze,m,n); if(X!=0) result_maze(m,n); case 3:cycle=(-1); break; } 调试分析 程序主界面 手动输入迷宫 在调试过程中,首先使用的是栈进行存储,但是产生的路径是多条或不是最短路径,所以通过算法比较,改用此算法 调试过程出现了最多60个错误。后经多次调试检查,发现有些格式问题没有注意比如函数括号的放置等。 课程设计总结 通过这段时间的数据结构课程设计,本人对计算机的应用,数据结构的作用以及C语言的使用都有了更深的了解。尤其是C语言的进步让我深刻的感受到任何所学的知识都需要实践,没有实践就无法真正理解这些知识以及掌握它们,使其成为自己的财富。在理论学习和上机实践的各个环节中,通过自主学习和认真听老师讲课分析,我收获了不少。当然也遇到不少的问题,也正是因为这些问题引发的思考给我带了收获。从当初不喜欢上机写程序到现在能主动写程序,从当初拿着程序不只如何下手到现在知道如何分析问题,如何用专业知识解决实际问题的转变,我发现无论是专业知识还是动手能力,自己都有很大程度的提高。在这段时间里,我对for、while等的循环函数用法更加熟悉,逐渐形成了较好的编程习惯。在老师的指导帮助下,同学们课余时间的讨论中,这些问题都一一得到了解决。在程序的调试能力上,无形中得到了许多的提高。例如:头文件的使用,变量和数组的范围问题,定义变量时出现的问题等等。 在实际的上机操作过程中,不仅是让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次实习可以提高我们分析设计能力和编程能力,为后续课程的学习及实践打下良好的基础。时间过得真快,大学生活不知不觉就走过了一学期,这一学期的大学学习和课程实践阶段的提高,使我们本身知识得到提高的同时,也增强了我们对未来工作的信心,我们相信自己未来两年半的学习更使我们有能力胜任将来的工作。 附录 通讯录源程序 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct record { char name[20]; char street[20]; char city[20]; char eip[20]; //邮编 char state[20]; }people[500];//500个记录,可修改 struct pnode { record data; struct pnode *next, *prior;//双循环链表 }; typedef pnode * linklist; linklist l; int len=0;//链表长度 FILE *fp; //文件指针 void mainmenu();//主菜单 void searchmenu();//查询菜单 void enter();//添加新纪录 void search();//按条件搜索记录 void display();//显示全部记录 void load();//载入文件内容 void save();//写入文件 void del();//删除记录 void listinsert();//插入结点函数 void initlist();//初始化链表函数 void main() //主函数 { initlist(); load(); listinsert(); while (1) mainmenu(); //进入主菜单,有非法输入仍停留在主菜单 } void initlist()//链表初始化函数 { l=(linklist)malloc(sizeof(pnode));//动态申请内存 l->next=l; l->prior=l; } void load()//装载已有文件信息 { if((fp=fopen("txl.txt","rb"))==NULL) { printf("\n\t\t通讯录文件不存在"); if ((fp=fopen("txl.txt","wb"))==NULL) { printf("\n\t\t建立失败"); exit(0); } else { printf("\n\t\t通讯录文件已建立"); printf("\n\t\t按任意键进入主菜单"); getch(); return; } exit(0); } //导入文件功能部分 fseek(fp,0,2); if (ftell(fp)>0) { rewind(fp); for(len=0;!feof(fp)&&fread(&people[len],sizeof(struct record),1,fp);len++); printf("\n\t\t文件导入成功"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } printf("\n\t\t文件导入成功"); printf("\n\t\t通讯录文件中无任何纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } void listinsert()//增加新结点 { linklist s,p=l; for(int i=0;i<len;i++) { s=(linklist)malloc(sizeof(pnode)); strcpy(s->data.name,people[i].name); strcpy(s->data.city,people[i].city); strcpy(s->data.street,people[i].street); strcpy(s->data.eip,people[i].eip); strcpy(s->data.state,people[i].state); s->prior=p->prior; s->next=p; p->prior->next=s; p->prior=s; p=p->next; } } void mainmenu()//主菜单 { char ch; system("cls"); printf("\n\t\t 欢迎进入通讯录系统"); printf("\n\t\t 1-新添纪录 "); printf("\n\t\t 2-查找联系人 "); printf("\n\t\t 3-删除联系人 "); printf("\n\t\t 4-保存 "); printf("\n\t\t 5-退出 "); printf("\n\t\t"); printf("\n\t\t请选择:"); printf("%c ",ch=getch()); switch (ch) { case '1':enter();break; case '2':searchmenu();break; case '3':del();break; case '4':save();break; case '5':exit(0); default:mainmenu(); } } void enter()//添加新纪录 { printf("\n\t\t**************** 请输入学生信息 ****************\n"); printf("\n\t\t姓名:"); scanf("%s",&people[len].name); printf("\n\t\t街道:"); scanf("%s",&people[len].street); printf("\n\t\t城市:"); scanf("%s",&people[len].city); printf("\n\t\t邮编:"); scanf("%s",&people[len].eip); printf("\n\t\t国家:"); scanf("%s",&people[len].state); len++; printf("\n\t\t是否继续添加?(Y/N):"); if (getch()=='y') enter(); return; } void searchmenu()//查询菜单 { char ch; system("cls"); printf("\n\t\t 查询菜单 "); printf("\n\t\t 1-显示所有记录 "); printf("\n\t\t 2-按姓名查询 "); printf("\n\t\t 3-返回主菜单 "); printf("\n\t\t"); printf("\n\t\t请选择:"); printf("%c",ch=getch()); switch (ch) { case '1':display();break; case '2':search();break; case '3':mainmenu();break; } } void search() { printf("\n\t\t***************** 按姓名查找 *******************"); char name[20]; printf("\n\t\t请输入姓名:"); scanf("%s",name); printf(" 查询到的信息:\n"); printf(" %-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家");//格式控制输出 printf(" -----------------------------------------------------------------------------\n"); for (int i=0;i<len;i++) { if(strcmp(name,people[i].name)==0) printf(" %-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state); if (i+1<len) continue;//重名纪录再检索 } printf(" -----------------------------------------------------------------------------\n"); printf("\n\t\t按任意键返回查询菜单"); getch(); searchmenu(); } void display()//显示所有纪录 { int i; system("cls"); if(len!=0) { printf("\n\t\t*************** 以下为通讯录所有信息************\n\n"); printf(" %-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家"); printf(" -----------------------------------------------------------------------------\n"); for (i=0;i<len;i++) { printf(" %-18s%-18s%-18s%-15s%s\n",people[i].name,people[i].street,people[i].city,people[i].eip,people[i].state); if (i+1<len) continue; } printf(" -----------------------------------------------------------------------------\n"); } else printf("\n\t\t通讯录中无任何纪录"); printf("\n\t\t按任意键返回查询菜单:"); getch(); searchmenu(); } void del() //删除纪录 { int a=0,i,j,findmark; //findmark为查找结果标志 // int findmark=0,delmark=0; char name[20]; printf("\n\t\t请输入要删除学生姓名:"); scanf("%s",name); for (i=a;i<len;i++) { if (findmark=strcmp(people[i].name,name)==NULL) //找到一条符合条件的记录 { // findmark++; printf("\n\t\t以下是您要删除的学生纪录:\n"); printf(" %-18s%-18s%-18s%-15s%s\n","姓名","街道","城市","邮编","国家"); printf(" -----------------------------------------------------------------------------\n"); printf(" %-
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服