C课程设计

时间:2024.4.20

二○一一 ~二○一二学年第 二 学期

信息科学与工程学院

课程设计报告书

班    级:     电技1004               

学    号:      201012135162                  

姓    名:        张泽霖                  

一、需求分析

设计题目:

运用C中有关链表及外部文件的内容,设计学生成绩管理系统。

设计要求

①   建立学生信息,信息至少包含学号、姓名、专业、班级、5门课程的成绩;

②   能够提供添加、删除和修改学生信息的功能;

③   能够提供按不同方式查询的功能;如按姓名或学号等查询学生相关信息;

④   能否按照指定需求对学生信息排序。如按指定课程成绩或者按总成绩排序等

⑤   将学生信息保存在外部文件中;

⑥   能够按表格方式输出学生信息。

系统功能需求分析:

①   为实现输入学生成绩的目标,需定义一个结构体类。

②   分别建立具有添加、删除、修改、查询等功能的子函数,完成相应功能,对程序实现模块化。这其中要用到对链表的插入、遍历等知识。插入时也要先找到相应结点,再添加。

③   为实现存储读取功能,需用到文件的相关函数。

二、概要设计

系统总体设计框架:

对程序进行模块化,定义结构体变量和各个子函数来完成所需要的功能和界面。从主函数开始执行,调用各个子函数达成目标。

三、详细设计

1.        定义*定义结构体数组用于缓存数据。

2.        写菜单选择函数,输入函数,查找记录函数,删除记录函数,排序函数,,插入记录函数,保存数据函数,文件读取函数来完成所需要的功能。

3.  定义main函数,写出函数主体。

四、源程序

#include <stdio.h>

#include <stdlib.h> 

#include <string.h> 

#include <time.h>

#define LEN sizeof(STUDENT)

typedef struct stu 

{

       char  num[6];

       char  name[5];

       int   score[3];

       int   sum;

       float average;

       int   order;

       struct stu *next;

}STUDENT;

STUDENT *Init()

{

       return NULL; 

}

int Menu_Select()

{

       int n;

       struct tm *pt;

       time_t t;

       t=time(NULL);

       pt=localtime(&t); 

       printf("\n按任一键进入主菜单...... \n"); 

       system("pause");

       system("cls");  

printf("********************************************************************************\n");

       printf("\t\t 欢迎 Welcome to\n");

       printf("\n\t\t\t 使用学生管理系统1.0\n");

printf("*************************************MENU***************************************\n");

       printf("\t\t\t1. 输入学生成绩记录 Enter the record\n");  

       printf("\t\t\t2. 显示 Print the record\n");  

       printf("\t\t\t4. 删除 Delete a record\n"); 

       printf("\t\t\t5. 排序 Sort to make New a file\n"); 

       printf("\t\t\t6. 插入 Insert record to list\n"); 

       printf("\t\t\t7. 保存 Save the file\n"); 

       printf("\t\t\t8. 读取 Load the file\n"); 

       printf("\t\t\t9. 退出 Quit\n");  

printf("\n********************************************************************************\n");

       printf("\t\t\t\t当前系统日期:%d-%d-%d\n",pt->tm_year+1900,pt->tm_mon+1,pt->tm_mday);

       do

       {

              printf("\n\t\t\t输入你的选择Enter your choice(1~9):");

              fflush(stdin);

              scanf("%d",&n);

       }while(n<1||n>9); 

       return(n); 

}

STUDENT *Create()

{

       int i,s;

       STUDENT *head=NULL,*p;  

       system("cls");

       for(;;)

       {

              p=(STUDENT *)malloc(LEN);

              if(!p) 

              {

                     printf("\n输出内存溢出. Out of memory.");  

                     return (head);  

              }

              printf("输入学号Enter the num(0:list end):");

              scanf("%s",p->num);

              if(p->num[0]=='0') break; 

              printf("输入名字Enter the name:");

              scanf("%s",p->name);

              printf("请输入3门成绩Please enter the %d scores\n",3);  

              s=0; 

              for(i=0;i<3;i++) 

              {

                     do

                     {

                            printf("成绩score%d:",i+1);

                            scanf("%d",&p->score[i]);

                            if(p->score[i]<0 || p->score[i]>100) 

                                   printf("数据错误,请重新输入 Data error,please enter again.\n");

                     }while(p->score[i]<0 || p->score[i]>100);

                     s=s+p->score[i]; 

              }

              p->sum=s; 

              p->average=(float)s/3; 

              p->order=0;

              p->next=head;  

              head=p; 

       }

       return(head);

}

void Print(STUDENT *head)

{

       int i=0; 

       STUDENT *p;

       system("cls");

       p=head; 

printf("\n************************************STUDENT************************************\n");

       printf("-------------------------------------------------------------------------------\n");

       printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");

       printf("-------------------------------------------------------------------------------\n");

       while(p!=NULL)

       {

              i++;

              printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",

                     i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);

              p=p->next;

       }

       printf("-------------------------------------------------------------------------------\n");

printf("**************************************END**************************************\n");

}

void Search(STUDENT *head)

{

       STUDENT *p;

       char s[5]; 

       system("cls");

       printf("请输入个姓名来查找. Please enter name for searching.\n");

       scanf("%s",s);

       p=head; 

       while(strcmp(p->name,s) && p != NULL) 

              p=p->next;

       if(p!=NULL) 

       {

       printf("\n*************************************FOUND************************************\n");

              printf("-------------------------------------------------------------------------------\n");

              printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");

              printf("-------------------------------------------------------------------------------\n");

              printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",

                     p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);

              printf("-------------------------------------------------------------------------------\n");

       printf("***************************************END**************************************\n");

       }

       else

              printf("\n没有该学生 There is no num %s student on the list.\n",s); 

}

STUDENT *Delete(STUDENT *head)

{

        

       STUDENT *p1,*p2; 

       char c,s[6]; 

       system("cls");

       printf("请输入要删除的学号 Please enter the Deleted num: ");

       scanf("%s",s);

       p1=p2=head; 

       while(strcmp(p1->num,s) && p1 != NULL) 

       {

              p2=p1; 

              p1=p1->next; 

       }

       if(strcmp(p1->num,s)==0) 

       {

       printf("**************************************FOUND************************************\n");

              printf("-------------------------------------------------------------------------------\n");

              printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");

              printf("-------------------------------------------------------------------------------\n");

              printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",

                p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);

              printf("-------------------------------------------------------------------------------\n");

       printf("***************************************END**************************************\n");

              printf("\n是否要删除,输入Y删除,N则退出\nAre you sure to Delete the student Y/N ?"); 

              for(;;)

              {

                     scanf("%c",&c);

                     if(c=='n'||c=='N') break; 

                     if(c=='y'||c=='Y')

                     {

                            if(p1==head)

                                   head=p1->next; 

                            else

                                   p2->next=p1->next;

                             

                            printf("\n学号为(Num): %s 学生以被删除(student have been Deleted.)\n",s);

                            printf("别忘了保存. Don't forget to Save.\n");break;  

                     }

              }

       }

       else

              printf("\n没有这个学生在表上\nThere is no num %s student on the list.\n",s);

       return(head);

}

STUDENT *Sort(STUDENT *head)

{

       int i=0; 

       STUDENT *p1,*p2,*t,*temp; 

       temp=head->next; 

       head->next=NULL; 

       while(temp!=NULL) 

       {

              t=temp; 

              temp=temp->next;

              p1=head; 

              p2=head;  

              while(t->average<p1->average&&p1!=NULL) 

              {

                     p2=p1; 

                     p1=p1->next;

              }

              if(p1==p2) 

              {

                     t->next=p1; 

                     head=t; 

              }

              else

              {

                     t->next=p1; 

                     p2->next=t; 

              }

       }

       p1=head; 

       while(p1!=NULL) 

       {

              i++; 

              p1->order=i; 

              p1=p1->next; 

       }

       printf("排序成功 Sorting is sucessful.\n"); 

       return (head);

}

STUDENT *Insert(STUDENT *head,STUDENT *New)

{

       STUDENT *p0,*p1,*p2;

       int sum1,i;

       p1=head; 

       p0=New;

       printf("\nPlease enter a New record.\n");

       printf("输入学号Enter the num:");

       scanf("%s",New->num);

       printf("输入名字Enter the name:");

       scanf("%s",New->name);

       printf("Please enter the %d scores.\n",3);

       sum1=0; 

       for(i=0;i<3;i++)

       {

              do

              {

                     printf("成绩score%d:",i+1);

                     scanf("%d",&New->score[i]);

                     if(New->score[i]>100||New->score[i]<0)

                            printf("数据错误Data error,please enter again.\n");

              }while(New->score[i]>100||New->score[i]<0);

              sum1=sum1+New->score[i]; 

       }

       New->sum=sum1; 

       New->average=(float)sum1/3;

       New->order=0;

       if(head==NULL) 

       {

              head=p0;

              p0->next=NULL;

       } 

       else

       {

              while((p0->average<p1->average)&&(p1->next!=NULL))

              {

                     p2=p1; 

                     p1=p1->next; 

              }

              if(p0->average>=p1->average)

              {

                     if(head==p1)head=p0; 

                     else p2->next=p0; 

                     p0->next=p1;

              }

              else

              {

                     p1->next=p0;

                     p0->next=NULL;

              } 

       }

       head=Sort(head);

       printf("\n学生Student %s 已被更新have been inserted.\n",New->name);

       printf("不要忘了保存Don't forget to Save the New file.\n");

       return(head);

}

void Save(STUDENT *head)

{

       FILE *fp; 

       STUDENT *p; 

       char outfile[10];

       printf("输出文件例如:c:\\score Enter outfile name,for example c:\\score\n");

       scanf("%s",outfile);

       if((fp=fopen(outfile,"w"))==NULL) 

       {

              printf("打不开文件Cannot open the file\n");

              return; 

       }

       printf("\n保存中...Saving the file......\n");

       p=head;  

       while(p!=NULL) 

       {

              fwrite(p,LEN,1,fp); 

              p=p->next; 

       }

       fclose(fp); 

       printf("保存成功....Save the file successfully!\n");

}

STUDENT *Load()

{

       STUDENT *p1,*p2,*head=NULL;

       FILE *fp; 

       char infile[10];

       printf("倒入文件例如:c:\\score Enter infile name,for example c:\\score\n");

       scanf("%s",infile);

       if((fp=fopen(infile,"r"))==NULL) 

       {

              printf("打不开文件Can not open the file.\n");

              return(head);

       }

       printf("\n寻找文件...Loading the file!\n");

       p1=(STUDENT *)malloc(LEN); 

       if(!p1)

       {

              printf("内存溢出!Out of memory!\n");

              return(head);

       }

       head=p1; 

       while(!feof(fp)) 

       {

              if(fread(p1,LEN,1,fp)!=1) break;  

              p1->next=(STUDENT *)malloc(LEN);  

              if(!p1->next)

              {

                     printf("Out of memory!\n");

                     return (head);

              }

              p2=p1; 

              p1=p1->next;

       }

       p2->next=NULL; 

       fclose(fp);

       printf("\n你成功的从文件中读取了数据!\nYou have success to read data from the file!\n");

       return (head);

}

int main()

{

       STUDENT *head,New;

       head=Init(); 

       for(;;)     

       {

              switch(Menu_Select())

              {

              case 1:head=Create();break;

              case 2:Print(head);break;

              case 3:Search(head);break;

              case 4:head=Delete(head);break;

              case 5:head=Sort(head);break;

              case 6:head=Insert(head,&New);break; 

              case 7:Save(head);break;

              case 8:head=Load(); break;

              case 9:exit(0); 

              }

       }

       return 0;

}

五、调试分析过程描述

出错现象:写switch语句时没再case的末尾加上break,导致程序一直向下执行。

解决方法:在switch语句的每个case之后加上break,使程序在运行之后可以完美退出而不影响后面的结果。

六、课程设计小结

通过对这一课题的设计和实现,我对VC有了更深一步的了解,对VC的工作界面更加熟悉,并且通过这样的了解成功编出可正确执行的C程序,大大增加了学习VC的兴趣。

更多相关推荐:
工程预算课程设计总结

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着工程技术发展的日新日异,工程造价已经成为当今建筑工程领域最为重要的管理环…

c++课程设计总结

课程设计总结经过一个学期对《C++程序设计》的学习,我学习到了基本的理论知识,了解到了C++语言程序设计的思想,这些知识都为我的课程实践和进一步的学习打下了坚实的基础。在为期近两周的C++课程设计中,我体会颇多…

化工原理课程设计总结

《化工原理课程设计》总结本学期顺利完成了化学工程与工艺专业共100名同学的化工原理课程设计,总体来看学生的工艺计算、过程设计及绘图等专业能力得到了真正有效的提高,可以较好地把理论学习中的分散知识点和实际生产操作…

PLC自动门课程设计心得体会

PLC自动门课程设计心得体会:通过此次C语言程序设计实践本人实在是获益不浅!C语言是上个学期开的课程所以这个学期并没怎么看过当要开始设计的时候还真不知从哪下手!结果第一次的上机我傻坐着不知道该做什么后来就写了几…

课程设计心得体会

课程设计心得体会在初学C语言的一个学期后,学校组织我们进行了C语言实训,尝试编写一些有难度的程序。在为期两周的时间中,同组同学共同的感受是:C语言实训和平时上课所接触的程序是完全不同的,所经受的考验是平时所无法…

综合实践活动课程设计练习题(判断题、填空题、名词解释、简答题)

单选题第1题(3.0)分下列以研究性为主的探究活动的实施程序哪个是正确的√A、产生问题-确定主题-组建小组-制定计划-开展活动-总结成果-展示交流-评价反思B、产生问题--组建小组-确定主题-制定计划-开展活动…

20xx年《管理信息系统》课程设计论文选题

20xx年《管理信息系统》课程设计论文选题一、管理信息系统设计与开发1、IT行业市场情报管理信息系统设计与开发2、某工业企业生产业务处理信息系统设计与开发3、某产品质量管理信息系统设计与开发4、某工业企业设备管…

消防课程设计范文.doc

课程设计课题名称所在班级同组姓名指导教师目录1前言12简介13火灾危险性分析231学生公寓的火灾特点232学生公寓的火灾危险性等级233学生公寓的耐火等级2331建筑物耐火等级的划分2332建筑物耐火等级的选定...

化工原理课程设计范文

化工原理课程设计3题目吸收量为2400mh水吸收丙酮过程填料塔设计教学院专业班级学生姓名学生学号指导教师20xx年12月24日I目录任务书1摘要2第一章绪论311吸收技术概况312吸收设备的发展313吸收过程在...

毕业论文及课程设计参考模版

摘要摘要电信营业厅顾客排队是一个常见的现象为了提高顾客满意度并为实现电信企业转型提供保障必须解决好这个问题而解决该问题的基本目标是平稳波动的顾客需求与电信营业厅有限的服务能力之间的矛盾本文基于排队论和需求管理的...

课程设计排版范本

课程设计课题名称我校顺枫公寓A6栋的消防现状分析与改进专业名称安全工程所在班级安本0803班设计者解燕同组人姜琼学号0860124031008601240212指导教师胡鸿湖南工学院课程设计任务书安全与环境工程...

创新课程设计范例

机械创新设计课程设计院系班级成员指导老师设计题目1年月日多功能平口钳设计方案一设计任务简述多功能平口钳为了实现平口钳的多功能化解决平口钳功能单一的问题设计出一种多功能平口钳其我们将钳口作成燕尾槽结构并配合以不同...

课程设计(518篇)