数据结构实验报告(报告+C语言源代码) 下载本文

内容发布更新时间 : 2024/12/26 16:45:11星期一 下面是文章的全部内容请认真阅读。

心得体会

通过本程序的设计,我对数据结构作了以下总结:要解决一道程序题必须先要认真

捕捉改程序中的有用信息,找出解决方法。先规划好,程序需要什么样的数据结构,什么函数,对程序有什么要求。然后从整体把握对程序设计进行分工,相应地把程序分成若干模块,具体实现各部分实行相应的功能。一个程序要顺利地进行设计,一是要对程序的功能有全面的了解,如果漏了某些部分,都会使得这个程序调试不出来或者是令该程序没有达到预想的效果。其次,在程序的编译中,必须注重程序设计过程中的细节,像单链表的程序,就要理解链表的概念,理解链表的数据特点,要清楚知道数据域和指针域的作用,否则,很容易会浪费大量时间在检测错误上面。 要说到解题的思考方向,如果要总结成规律,我认为要灵活的进行方法的设计,通过不同的方法来实现不同的功能,如通过结点的插入来实现链表的创建。同时应该注意各种语句的选择,要先预想好需要什么样的语句来实现函数定义,尽量简单快捷地完成,避免出错。

要规范面向对象程序设计师的书写协管,在这次课程设计中,我们再次感受到,规范的程序书写,可以更好的进行后期的差错补漏。还应该注意各种面向对象语言语法的运用,例如继承的方法,都要严格按照语法来进行,否则很容易就会出现错误,甚至严重影响课程设计的进度。

11

源代码

#include \ #include \ #include \ int shoudsave=0; // struct student {

char num[10];//学号 char name[20]; char sex[4]; int cgrade; int mgrade; int egrade; int totle; int ave;

char neartime[10];//最近更新时间 };

typedef struct node {

struct student data; struct node *next; }Node,*Link;

int menu() {

char m[3]; int n;

printf(\************************欢迎进入学生成绩管理系统******************************\\n\\n\

printf(\欢迎使用本学生管理系统,本系统将为您提供历史学生信息查询,学生成绩信息管理功能。\\n\

printf(\*********\

printf(\输入学生资料\\t\\t\\t\\t\\t2删除学生资料\\n\ printf(\查询学生资料\\t\\t\\t\\t\\t4修改学生资料\\n\ printf(\显示学生资料\\t\\t\\t\\t\\t6统计学生成绩\\n\ printf(\保存学生资料\\n\

printf(\

printf(\

12

*********\\n\ scanf(\ n=atoi(m); return(n); }

void printstart() {

printf(\ }

void Wrong() {

printf(\提示:输入错误!\\n\ }

void Nofind() {

printf(\提示:没有找到该学生!\\n\ }

void printc() // 本函数用于输出中文 {

printf(\学号\\t 姓名 性别 英语成绩 数据库成绩 数据结构成绩 总分 平均分\\n\ }

void printe(Node *p)//本函数用于输出英文 {

printf(\%d\\n\data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave); }

Node* Locate(Link l,char findmess[],char nameornum[]) //该函数用于定位连表中符合要求的接点,并返回该指针 {

Node *r;

if(strcmp(nameornum,\按学号查询 {

r=l->next;

while(r!=NULL) {

if(strcmp(r->data.num,findmess)==0) return r; r=r->next;

13

} }

else if(strcmp(nameornum,\按姓名查询 {

r=l->next;

while(r!=NULL) {

if(strcmp(r->data.name,findmess)==0) return r; r=r->next; } }

return 0; }

void Add(Link l) //增加学生 {

Node *p,*r,*s; char num[10]; r=l;

s=l->next;

while(r->next!=NULL)

r=r->next; //将指针置于最末尾 while(1) {

printf(\请你输入学号(以'0'返回上一级菜单:)\ scanf(\

if(strcmp(num,\ break; while(s) {

if(strcmp(s->data.num,num)==0) {

printf(\提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\\n\

printstart(); printc(); printe(s); printstart(); printf(\ return; }

s=s->next; }

14

p=(Node *)malloc(sizeof(Node));

strcpy(p->data.num,num); printf(\请你输入姓名:\ scanf(\ getchar();

printf(\请你输入性别:\ scanf(\ getchar();

printf(\请你输入数据结构成绩:\ scanf(\ getchar();

printf(\请你输入数据库成绩:\ scanf(\ getchar();

printf(\请你输入英语成绩:\ scanf(\ getchar();

p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade; p->data.ave=p->data.totle / 3; //信息输入已经完成 p->next=NULL; r->next=p; r=p;

shoudsave=1; } }

void Qur(Link l) //查询学生 {

char findmess[20]; Node *p;

if(!l->next) {

printf(\提示:没有资料可以查询!\\n\ return; }

printf(\请你输入要查找的学号:\ scanf(\

p=Locate(l,findmess,\ if(p) {

15