心得体会
通过本程序的设计,我对数据结构作了以下总结:要解决一道程序题必须先要认真
捕捉改程序中的有用信息,找出解决方法。先规划好,程序需要什么样的数据结构,什么函数,对程序有什么要求。然后从整体把握对程序设计进行分工,相应地把程序分成若干模块,具体实现各部分实行相应的功能。一个程序要顺利地进行设计,一是要对程序的功能有全面的了解,如果漏了某些部分,都会使得这个程序调试不出来或者是令该程序没有达到预想的效果。其次,在程序的编译中,必须注重程序设计过程中的细节,像单链表的程序,就要理解链表的概念,理解链表的数据特点,要清楚知道数据域和指针域的作用,否则,很容易会浪费大量时间在检测错误上面。 要说到解题的思考方向,如果要总结成规律,我认为要灵活的进行方法的设计,通过不同的方法来实现不同的功能,如通过结点的插入来实现链表的创建。同时应该注意各种语句的选择,要先预想好需要什么样的语句来实现函数定义,尽量简单快捷地完成,避免出错。
要规范面向对象程序设计师的书写协管,在这次课程设计中,我们再次感受到,规范的程序书写,可以更好的进行后期的差错补漏。还应该注意各种面向对象语言语法的运用,例如继承的方法,都要严格按照语法来进行,否则很容易就会出现错误,甚至严重影响课程设计的进度。
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