编程实习报告_第1页
编程实习报告_第2页
编程实习报告_第3页
编程实习报告_第4页
编程实习报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业编程实习实习报告学 号:_班 级:_学生姓名:_起始日期:_完成日期:_一、任务要求用字符串指针实现学生成绩管理系统完成函数 void DeleteStudent(char* students,int* marks); void SortClass(char* students,int* marks); void ShowClass(char* students,int* marks); void EditMarks(char* students,int* marks)

2、;二、详细设计void InsertStudent(char* students,int* marks); 插入学生姓名基本想法:先读取学生姓名,判断指针是否为空,为空则建立内存。不为空则再开拓新的内存空间,将读取的学生与名单进行一一对照。若有相同的,则显示已存在该学生,若没有相同的,则开拓内存给新到的学生,并对名单进行排序,最后释放内存。 开始 读取插入的学生姓名判断指针是否为空 是否 建立初始内存 Malloc 扩展新内存 realloc判断学生是否 在名单内显示该学生已 在名单内开拓成绩与姓名的内存对所有的学生进行排序 返回void DeleteStudent(char* student

3、s,int* marks);删除学生信息基本想法: 先读取要删除的学生姓名,将读入的学生姓名与已存在的学生进行比较,如相同,记住该学生所在位置,判断该学生下一个是否为空,若为空,就可以直接把该学生内存释放掉。若不是,则用一个while 将后面的所有学生向前移一位 直到NULL,再释放最后的内存,最后再释放学生姓名的那个内存 开始 否 读取学生姓名与名单里的学生作比较是否相同且不为空是该学生的下一个是否为空 是否将后面的学生信息向前移一位释放最后一个的内存以及名字的内存 返回void SortClass(char* students,int* marks);排序 基本想法: 采用冒泡法来进行排序

4、。N次排序 先进行n-1次比大小,找到最小的,与第一个交换,再进行n-2次。 开始判断该学生i是否为空否比大小,名单后最小的学生将该学生与学生i互换 i+ 返回void ShowClass(char* students,int* marks);显示所有学生信息基本想法:直接用printf输出。 开始判断指针是否为空否 输出学生信息 i+ 是判断该学生是否为空 结束void EditMarks(char* students,int* marks); 编辑学生成绩基本想法: 先读取要编辑的学生姓名,然后与所有的学生姓名进行比较,判断是否在名单内,若不在,就输出不在,否则 就再读取该学生的5个成绩到

5、 marks 开始 读取编辑学生的姓名判断学生是否在名单内 是 否输入5个成绩,并将mark的指针指向这5个成绩 显示该学生不在名单内 返回三、编码实现void DeleteStudent(char* students,int* marks) int found, i,j; char* students1; int* marks1; students1 = *students; marks1 = *marks; char *name; printf(enter names of students to be deleted separated by commasn); name = ReadL

6、ine(); / 读姓名 if(students1 =NULL) return ; for(found = i = 0; students1i != NULL; i+)/ 判断是否已经存在该学生 if (strcmp(students1i,name) = 0) / 判断函数 相同为0 found = 1; break; if (!found) /如果不同 printf(student %s not in the Class Listn,name); return; if(students1i+1!= NULL) /判断下一个学生是否为空 j=i+1; while(students1j!=NUL

7、L) /不为空时,将学生信息向前移一位 students1j-1=students1j; marks1j-1= marks1j; j+; students1j-1=NULL; marks1j-1= NULL; free(void*)students1j-1); / 释放内存 free(void*)marks1j-1); else students1i=NULL; marks1i = NULL; free(void*)students1i); free(void*)marks1i); *students = students1; *marks = marks1; free(void*)name)

8、; /释放姓名内存 void ShowClass(char* students,int* marks) int i, j,k; char* students1,*stu1; int* marks1,*mar1; students1 = students; marks1 = marks; for(i = 0; students1i+1 != NULL; i+) / 最小冒泡排序法 k=i; for(j=i+1;students1j !=NULL; j+) if(strcmp(students1j,students1k) 0) k=j; stu1 = students1k; students1k

9、= students1i; students1i = stu1; mar1 = marks1k; marks1k = marks1i; marks1i = mar1; students = students1; marks = marks1; void ShowClass(char* students,int* marks) int i; fflush(stdout); if(students=NULL) /指针为空 则返回 printf(Class is Empty!n); return; printf(Class List:n); printf(students:第一门第二门第三门第四门第

10、五门 总分 n); for(i=0;studentsi!=NULL;i+) if(marksi0=-1&marksi1=-1&marksi2=-1&marksi3 =-1&marksi4=-1) printf(%s: , , , , , n,studentsi); else printf(%s: %d, %d, %d, %d, %d %dn,studentsi,marksi0,marksi1,marksi2,marksi3,marksi4,(marksi0+marksi1+marksi2+marksi3+marksi4); return; void EditMarks(char* studen

11、ts,int* marks) /编辑学生成绩 int found, i,score; char* students1; int* marks1; students1 = students; marks1 = marks; char *name; printf(Enter student name whose marks are to be edited:n); name = ReadLine(); for(found = i = 0; students1i != NULL; i+) if (strcmp(students1i,name) = 0) / 相同为0 found = 1; print

12、f(editing:%sn,name); break; if(!found) printf(student %s not in the Class listn,name); while (found) /读取输入的五个成绩 printf(to leave the 1st mark unchanged,press n); printf(otherwise type new mark and press n); scanf(%d,&score); while(score=0 & score =100) != 1) printf(incorrect mark entered,re-do:n); sc

13、anf(%d,&score); marksi0=score; printf(to leave the 2nd mark unchanged,press n); printf(otherwise type new mark and press n); scanf(%d,&score); while(score=0 & score =100) !=1) printf(incorrect mark entered,re-do:n); scanf(%d,&score); marksi1=score; printf(to leave the 3rd mark unchanged,press n); pr

14、intf(otherwise type new mark and press n); scanf(%d,&score); while(score=0 & score =100) !=1) printf(incorrect mark entered,re-do:n); scanf(%d,&score); marksi2=score; printf(to leave the 4th mark unchanged,press n); printf(otherwise type new mark and press n); scanf(%d,&score); while(score=0 & score

15、 =100) !=1) printf(incorrect mark entered,re-do:n); scanf(%d,&score); marksi3=score; printf(to leave the 5th mark unchanged,press n); printf(otherwise type new mark and press n); scanf(%d%c,&score); /吃掉回车键 while(score=0 & score =100) !=1) printf(incorrect mark entered,re-do:n); scanf(%d%c,&score); m

16、arksi4=score; return; 程序调试1.在调试的时候,刚运行的时候在什么都没有输入的时候,马上按2,发现程序就出现错误,我就在delete里面先加入一个判断 指针是否为空 为空就返回 来避免错误 2.在editmarks这个函数中 我采用scanf这个函数来读取成绩,在读取第五个成绩的时候发现读完后会在函数主菜单里出现一次的错误,询问同学,发现应该在第五个输入成绩的时候在%s后面再加一个%c 来吃掉一个回车键 这样主菜单就不会出现菜单错误的情况 五、总结 编程实习中 ,首先要看懂老师所给的部分程序,先了解老师给整个程序的基本方法,比如这个函数是用多级指针来完成这个程序 ,而不是用结构体来做链表来实现的,只有这个先弄懂这些才能做到心中有数。 在编程的过程中,要有系统的想法,知道整个框架是怎么构成的。 另外在编程基本完成后 要进行全面的调试,针对各个情况都进行尝试,尽可能避免出现错误 本次编程学习到了很多知识,特别感受到了链表在C语言中比数组来的更加方便,虽然完成了本次实习目的,但是设计出的软件还有很大缺陷,不是很完善,在几个地方不是很人性化,有待完善。本次实习收获很多,受益匪浅。 思考题 为什么插入一个学生、删除一个学生的函数(in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论