最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

c语言课程设计报告---学生信息管理系统

来源:动视网 责编:小OO 时间:2025-09-29 11:04:04
文档

c语言课程设计报告---学生信息管理系统

题目:学生信息管理系统一、需求分析任务要求:自学C语言中有关链表及外部文件的内容,设计学生信息管理系统。具体要求如下:◆建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容;◆能够提供添加、删除和修改学生信息等功能;◆能将通讯录保存在文件中;◆能够按指定方式输出学生信息。系统功能需求分析:★1、为存储学生信息,需定义一个结构体类型,成员名字、性别、年龄、学号、系别、家庭信息等,并建立链表,定义该结构体类型的指针,用于指向各结点;★2、分别建立具有添加、删除、修改、查询等功能的
推荐度:
导读题目:学生信息管理系统一、需求分析任务要求:自学C语言中有关链表及外部文件的内容,设计学生信息管理系统。具体要求如下:◆建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容;◆能够提供添加、删除和修改学生信息等功能;◆能将通讯录保存在文件中;◆能够按指定方式输出学生信息。系统功能需求分析:★1、为存储学生信息,需定义一个结构体类型,成员名字、性别、年龄、学号、系别、家庭信息等,并建立链表,定义该结构体类型的指针,用于指向各结点;★2、分别建立具有添加、删除、修改、查询等功能的
题目:学生信息管理系统

一、需求分析

任务要求:

自学C语言中有关链表及外部文件的内容,设计学生信息管理系统。具体要求如下:

◆ 建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容;

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

◆ 能将通讯录保存在文件中;

◆ 能够按指定方式输出学生信息。

系统功能需求分析:

★ 1、为存储学生信息,需定义一个结构体类型,成员名字、性别、年龄、学号、系别、家庭信息等,并建立链表,定义该结构体类型的指针,用于指向各结点;

★ 2、分别建立具有添加、删除、修改、查询等功能的子函数,完成相应功能,对程序实现模块化。这其中要用到对链表的删除、插入等知识。删除时用一结构体指针指向链表的第一个结点,检查该节点的值是否等于输入的要删除的学号,若相等就删除,不相等则后移指针,直至表尾。插入时也要先找到相应结点,再添加。

★3、为实现存储功能,需用到文件的相关函数,打开文件,将添加、修改或删除的信息存入磁盘中。

★4、为以表格的形式输出文件,宏定义格式化输出语句,指定输出学生信息。

二、概要设计

系统总体设计框架:

    对程序进行模块化,建立添加、修改、删除、查找和显示功能的子函数,各子函数中运用链表存储数据。从主函数开始执行,调用各个子函数,并运用文件相关知识将信息存入磁盘中。

系统功能模块图:

 

三、详细设计

主要功能模块的算法设计思路如下:

1、查询通讯录信息(void chakan())

(1)为开辟一个新单元

(2)输入查询关键字:

(3)读取保存的文件数据输入ASCLL字符:

(4)在链表中寻找相应结点;

(5)调用输出函数,输出结点信息。

2、添加信息函数(void add())

(1)定义指向结构体变量的指针;

(2)移动指针,找到插入结点;

(3)在要插入的结点输入信息;

(4)调用保存函数,打开文件,保存输入信息。

3、删除信息函数(void del())

(1)定义指向结构体变量的指针;

(2)用指针检验链表中是否有记录,若没记录,返回主函数;

(3)根据要修改的编号查找要删除的结点;

(4)修改链表,删除对应结点。

4、修改信息函数(void xiugai())

(1)定义指向结构体变量的指针;

(2)读取保存的文件数据输入ASCLL字符:

(3)用指针检验链表中是否有记录,若没记录,返回主函数;

(4)根据要修改的编号查找对应结点;

(5)修改信息;

(6)打开文件,保存修改记录。

 、保存信息函数(baocun())

(1)定义指向结构体变量的指针;

(2)用文件指针指向要读写的磁盘文件名,若没有则新建此文件名:

(3)用指针检验链表中是否有记录,若没记录,返回主函数:

(4)打开文件,保存记录:

6、屏幕操作函数(void stubent187())

(1)以一定格式输出所想要的图形:

四、主要源程序代码

定义变量:(对整个程序定义全局变量)

#include "stdio.h"

#include "conio.h"

  #define STUDENT ID    /*所有STUDENT都用ID来代替*/

  typedef struct node                        /*定义结构体*/

        {   char ming[50];                    /*名字*/

            char xing[50];                      /*性别*/

            char nian[50];                          /*年龄*/

            int  xuehao;                           /*学号*/

            char xibie[50];                       /*专业*/

            char sushe[50];                          /*宿舍号*/

            char jia[50];                      /*家庭地址*/

            struct node *next;

         }ID;              /*学生信息(变量名)*/

 ID *head=NULL;                  /*定义一个头指针*/

FILE *zhi;                           /*定义一个文件指针*/

主菜单界面:(进入屏幕界面的形式)

void stubent187()   /*屏幕格式函数*/

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

   printf("*              学生信息管理系统           *\\n");

   printf("*                                         *\\n");

   printf("*       请选择:1:查看; 2:添加; 3:删除;       *\\n");

   printf("*               4:修改; 0:退出系统          *\\n");

   printf("*                                         *\\n");

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

printf(">>>>>>>>>>>>>输入 0~4 数字<<<<<<<<<<<<<\\n");

   return ;

   }

查看学生信息记录:(对以保存在磁盘文件的学生信息进行查询)

void chakan()

    {                              /* 查看*/

     ID *t;

     t=head;

     t=(ID *)malloc(sizeof(ID));     /*为t开辟一个新单元*/

     if((zhi=fopen("yihu1.txt没有此文件\\n");

      else

      {   printf("%10s%10s%10s%10s%10s%10s%10s\\n     /*输出一个屏幕格式*/

         while (!feof(zhi))

         {      fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\\n",&t->ming,&t->xing,&t->nian,&t->xuehao,&t->xibie,&t->sushe,&t->jia);       /*读取保存的文件数据输入ASCLL字符:*/

printf("%10s%10s%10s%10d%10s%10s%10s\\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia);      /*以这形式输出各个学生信息*/

t->next=(ID *)malloc(sizeof(ID));t=t->next;

         }

       };

 }

添加学生信息记录:()

void add()

    {

     char i;                              /*添加*/

     ID *t1,*t2;

      t1=t2=NULL;

   loop:   t1=(ID *)malloc(sizeof(ID));        /*为t1开辟一个新单元*/

    printf("请输入姓名:");scanf("%s",&t1->ming); /* 姓名 */

     printf("请输入性别:");scanf("%s",&t1->xing); /* 性别  */

     printf("请输入年龄:");scanf("%s",&(t1->nian)); /* 年龄 */

     printf("请输入学号:");scanf("%d",&(t1->xuehao)); /* 学号   */

     printf("请输入系别:");scanf("%s",&(t1->xibie)); /*系别*/

     printf("请输入宿舍号:");scanf("%s",&(t1->sushe)); /*宿舍号*/

     printf("请输入家庭地址:");scanf("%s",&(t1->jia)); /*家庭地址*/

t1->next=NULL;

     if (head==NULL)                  /*如果头结点为空*/

      {  head=t1;                /*t1指向头结点*/

        t2=t1;

        }

     else {

          t2=head;

      while (t2->next!=NULL) t2=t2->next;   /*没有成立则指向下个结点*/

t2->next=t1;

     } getchar();

     printf("是否继续添加(Y/N):\\n");

     scanf("%s",&i);     /*输入Y/N*/

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

      {clrscr(); goto loop;      /*  清屏  在 循环*/

          }

      else  {printf("是否保存此次添加(Y/N)\\n");scanf("%s",&i);

                   if(i=='y'||i=='Y')      /*是否要保存*/

                      {baocun();     /*调用保存*/

                        clrscr();   /*清屏*/

                       stubent187();/*调用屏幕函数*/

                       printf("保存成功");

                         }

                     else   if(i=='n'||i=='N')

                         {

                             clrscr();     /*清屏*/

                            stubent187();}        /*调用屏幕函数*/

            }

     return ;

}

删除学生信息操作:(对以存的学生信息进行删除)

void del()

   {                                  /*删除*/

     ID *A,*B;         /*定义指针*/

     char t,i;int xuehao;         /*定义整型变量与字符型变量*/

     A=B=NULL;

     if((zhi=fopen("yihu1.txt没有此信息文件\\n");

    else

     {  loop:  printf("请输入要删除的学生学号:");scanf("%d",&xuehao);

             while (!feof(zhi))

{ fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\\n",&A->ming,&A->xing,&A->nian,&A->xuehao,&A->xibie,&A->sushe,&A->jia); /*读取保存的文件数据输入ASCLL字符:*/

if(A!=NULL && A->xuehao!=xuehao)

A=A->next;

                    else break;

                }

if (A->xuehao==xuehao)

{ head=A->next;

                    free(*A);

                    printf("成功!\\n");

                    printf("是否继续删除(Y/N)");scanf("%s",&i);

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

                       {clrscr(); goto loop;

                        }

                       if(i=='n'||i=='N')

                         printf("是否保存此次删除(Y/N)\\n");scanf("%s",&i);

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

                             baocun();

                          else

                                clrscr();

                                stubent187();

                    }

                else  printf("无法找到此编号\\n");

        }

      }

修改学生信息操作:(对保存的学生信息进行修改)

 void xiugai()

    {                                  /*修改*/

     ID *t1,*t2;              /*定义指针*/

     int i;char xuehao;           /*定义整型变量与字符型变量*/

     t1=head;

     if((zhi=fopen("yihu1.txt没有此信息文件\\n");

loop:     printf("请输入要修改的学号:");scanf("%s",&xuehao);   /* 输入编号*/

     while (!feof(zhi))

{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\\n",&t1->ming,&t1->xing,&t1->nian,&t1->xuehao,&t1->xibie,&t1->sushe,&t1->jia);   *读取保存的文件数据输入ASCLL字符:*/

if(t1!=NULL && t1->xuehao!=xuehao)

t1=t1->next;

                 else break;

            }

if (t1->xuehao==xuehao)

{ fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\\n",t1->ming,t1->xing,t1->nian,t1->xuehao,t1->xibie,t1->sushe,t1->jia);

      printf("输入名字:");scanf("%s",&t1->ming); /*名字*/

      printf("输入性别:");scanf("%s",&(t1->xing)); /*性别*/

      printf("输入年龄:");scanf("%s",&(t1->nian)); /*年龄*/

      printf("输入学号:");scanf("%s",&t1->xuehao); /*学号*/

    printf("输入系别:");scanf("%s",&(t1->xibie));     /*系别*/                                         printf("输入专业:");scanf("%s",&(t1->sushe)); /* 宿舍号 */           printf("输入家庭地址:");scanf("%s",&(t1->jia)); /* 家庭地址*/

                  printf("成功!\\n");

                  printf("是否继续修改(Y/N)");scanf("%d",&i);

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

                  {clrscr(); goto loop;

                        }

                       if(i=='n'||i=='N')

                         printf("是否保存此次修改(Y/N)\\n");scanf("%c",&i);

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

                             baocun();

                          else

                                clrscr();       /*清屏*/ 

                                stubent187();    /*调用屏幕函数*/

               }

             else  printf("没有此编号\\n");

            return;

        }

保存添加,删除,修改学生的信息:(操作过后是否保存)

baocun()                      /*保存*/

    {

     ID *t=head;              /*定义指针*/

     zhi=fopen("yihu1.txt读写 yihu.txt文本)  */

     while (t!=NULL){

fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia);        /*以zhi为文件指针保存*/

t=t->next;

     }

     fclose(zhi);                     /*关闭此文件*/

     printf("成功!\\n");          

     return ;

    }

主菜单操作:(选择所需要的操作)

main()      /*主函数*/

{

     int i;          /*定义整形变量i*/

  stubent187();     /*调用屏幕函数*/

    while(1)

      {

          scanf("%d",&i);       /*输入要执行的操作*/

            switch(i)

                {    case 1:chakan();break;     /*调用查看函数*/

                     case 2:add();break;        /*调用添加函数*/

                     case 3:del();break;        /*调用删除函数*/

                     case 4:xiugai();break;       /*调用修改函数*/

                     case 0:exit(0);            /*结束*/

                     default:printf("输入错误,请在此输入\\n");continue;

                 }           /*输入不是0~4的,则返回*/

        }

}

Ⅰ源函数代码:

void chakan()

    {                              /* 查看*/

     ID *t;

     t=head;

     t=(ID *)malloc(sizeof(ID));     /*为t开辟一个新单元*/

     if((zhi=fopen("yihu1.txt没有此文件\\n");

      else

      {   printf("%10s%10s%10s%10s%10s%10s%10s\\n     /*输出一个屏幕格式*/

         while (!feof(zhi))

         {      fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\\n",&t->ming,&t->xing,&t->nian,&t->xuehao,&t->xibie,&t->sushe,&t->jia);       /*读取保存的文件数据输入ASCLL字符:*/

printf("%10s%10s%10s%10d%10s%10s%10s\\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia);      /*以这形式输出各个学生信息*/

t->next=(ID *)malloc(sizeof(ID));t=t->next;

         }

       };

 }

void add()

    {

     char i;                              /*添加*/

     ID *t1,*t2;

      t1=t2=NULL;

   loop:   t1=(ID *)malloc(sizeof(ID));             /*为t1开辟一个新单元*/

     printf("请输入姓名:");scanf("%s",&t1->ming); /* 姓名 */

     printf("请输入性别:");scanf("%s",&t1->xing); /* 性别  */

     printf("请输入年龄:");scanf("%s",&(t1->nian)); /* 年龄 */

     printf("请输入学号:");scanf("%d",&(t1->xuehao)); /* 学号   */

     printf("请输入系别:");scanf("%s",&(t1->xibie)); /*系别*/

     printf("请输入宿舍号:");scanf("%s",&(t1->sushe)); /*宿舍号*/

     printf("请输入家庭地址:");scanf("%s",&(t1->jia)); /*家庭地址*/

t1->next=NULL;

     if (head==NULL)                  /*如果头结点为空*/

      {  head=t1;                /*t1指向头结点*/

        t2=t1;

        }

     else {

          t2=head;

      while (t2->next!=NULL) t2=t2->next;    /*没有成立则指向下个结点*/

t2->next=t1;

     } getchar();

     printf("是否继续添加(Y/N):\\n");

     scanf("%s",&i);     /*输入Y/N*/

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

      {clrscr(); goto loop;      /*  清屏  在 循环*/

          }

      else  {printf("是否保存此次添加(Y/N)\\n");scanf("%s",&i);

                   if(i=='y'||i=='Y')      /*是否要保存*/

                      {baocun();     /*调用保存*/

                        clrscr();   /*清屏*/

                       stubent187();/*调用屏幕函数*/

                       printf("保存成功");

                         }

                     else   if(i=='n'||i=='N')

                         {

                             clrscr();     /*清屏*/

                            stubent187();}        /*调用屏幕函数*/

            }

     return ;

}

void del()

   {                                  /*删除*/

     ID *A,*B;         /*定义指针*/

     char t,i;int xuehao;         /*定义整型变量与字符型变量*/

     A=B=NULL;

     if((zhi=fopen("yihu1.txt没有此信息文件\\n");

    else

     {  loop:  printf("请输入要删除的学生学号:");scanf("%d",&xuehao);

             while (!feof(zhi))

{ fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\\n",&A->ming,&A->xing,&A->nian,&A->xuehao,&A->xibie,&A->sushe,&A->jia); /*读取保存的文件数据输入ASCLL字符:*/

if(A!=NULL && A->xuehao!=xuehao)

A=A->next;

                    else break;

                }

if (A->xuehao==xuehao)

{ head=A->next;

                    free(*A);

                    printf("成功!\\n");

                    printf("是否继续删除(Y/N)");scanf("%s",&i);

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

                       {clrscr(); goto loop;

                        }

                       if(i=='n'||i=='N')

                         printf("是否保存此次删除(Y/N)\\n");scanf("%s",&i);

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

                             baocun();

                          else

                                clrscr();

                                stubent187();

                    }

                else  printf("无法找到此编号\\n");

        }

      }

void xiugai()

    {                                  /*修改*/

     ID *t1,*t2;              /*定义指针*/

     int i;char xuehao;           /*定义整型变量与字符型变量*/

     t1=head;

     if((zhi=fopen("yihu1.txt没有此信息文件\\n");

loop:     printf("请输入要修改的学号:");scanf("%s",&xuehao);   /* 输入编号*/

     while (!feof(zhi))

{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\\n",&t1->ming,&t1->xing,&t1->nian,&t1->xuehao,&t1->xibie,&t1->sushe,&t1->jia);   *读取保存的文件数据输入ASCLL字符:*/

if(t1!=NULL && t1->xuehao!=xuehao)

t1=t1->next;

                 else break;

            }

if (t1->xuehao==xuehao)

{ fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\\n",t1->ming,t1->xing,t1->nian,t1->xuehao,t1->xibie,t1->sushe,t1->jia);

      printf("输入名字:");scanf("%s",&t1->ming); /*名字*/

      printf("输入性别:");scanf("%s",&(t1->xing)); /*性别*/

      printf("输入年龄:");scanf("%s",&(t1->nian)); /*年龄*/

      printf("输入学号:");scanf("%s",&t1->xuehao); /*学号*/

    printf("输入系别:");scanf("%s",&(t1->xibie));     /*系别*/                                         printf("输入专业:");scanf("%s",&(t1->sushe)); /* 宿舍号 */           printf("输入家庭地址:");scanf("%s",&(t1->jia)); /* 家庭地址*/

                  printf("成功!\\n");

                  printf("是否继续修改(Y/N)");scanf("%d",&i);

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

                  {clrscr(); goto loop;

                        }

                       if(i=='n'||i=='N')

                         printf("是否保存此次修改(Y/N)\\n");scanf("%c",&i);

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

                             baocun();

                          else

                                clrscr();       /*清屏*/ 

                                stubent187();    /*调用屏幕函数*/

               }

             else  printf("没有此编号\\n");

            return;

        }

baocun()                      /*保存*/

    {

     ID *t=head;              /*定义指针*/

     zhi=fopen("yihu1.txt读写 yihu.txt文本)  */

     while (t!=NULL){

fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia);        /*以zhi为文件指针保存*/

t=t->next;

     }

     fclose(zhi);                     /*关闭此文件*/

     printf("成功!\\n");          

     return ;

    }

main()      /*主函数*/

{

     int i;          /*定义整形变量i*/

  stubent187();     /*调用屏幕函数*/

    while(1)

      {

          scanf("%d",&i);       /*输入要执行的操作*/

            switch(i)

                {    case 1:chakan();break;     /*调用查看函数*/

                     case 2:add();break;        /*调用添加函数*/

                     case 3:del();break;        /*调用删除函数*/

                     case 4:xiugai();break;       /*调用修改函数*/

                     case 0:exit(0);            /*结束*/

                     default:printf("输入错误,请在此输入\\n");continue;

                 }           /*输入不是0~4的,则返回*/

        }

}

5、归纳总结

①实训中遇到的问题及解决方法:

 在这次的实训中,主要遇到的问题是在修改第一个操作—查看时,出现了一些乱码,与规格不是所想实现的要求。后经老师指导解决了此问题,就是fprintf存文件数据后,需用fscanf来调用输出文件数据。

②设计中尚存的不足之处:

  关于这次的程序,有许多不足,比如在查询的方式中,只有单一的一个查询方式;程序界面不够美观大方;删除与修改的功能,没有实现我所想编程的操作;

③感想和心得体会:

  通过这次课程设计,我对C语言有了更深刻的了解,自身不仅对增强了程序的编写能力,更巩固了专业知识,对程序的模块化观念也又模糊逐渐变的清晰了。虽然在程序的运行与调试过程中出现了很多错误,但在通过反复地复习课本上的相关知识和在老师,同学的指导下,不停地修改与调试,我终于完成了这段程序。虽然程序没有预想中的实现多功能。但在编程过程中,我认识到了C语言的灵活性与严谨性,同一个功能可以由不同的语句来实现。编写程序时要特别注意细节方面的问题,一个小小的疏忽就能导致整个程序不能运行。

当然我也认识到了自己的不足之处,如对链表相关知识的欠缺,程序的构想不完好,文件运用的不熟练等。因此在今后的学习中,应多问老师,多向同学学习。

6、参考资料

[1] 谭浩强.   C程序设计(第三版).      清华大学出版社, 

[2] 沈岚岚    学生成绩管理系统           文件附件        

文档

c语言课程设计报告---学生信息管理系统

题目:学生信息管理系统一、需求分析任务要求:自学C语言中有关链表及外部文件的内容,设计学生信息管理系统。具体要求如下:◆建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容;◆能够提供添加、删除和修改学生信息等功能;◆能将通讯录保存在文件中;◆能够按指定方式输出学生信息。系统功能需求分析:★1、为存储学生信息,需定义一个结构体类型,成员名字、性别、年龄、学号、系别、家庭信息等,并建立链表,定义该结构体类型的指针,用于指向各结点;★2、分别建立具有添加、删除、修改、查询等功能的
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top