C语言学生信息管理系统实验报告

实 验 四:结构体

实验目的:

1.更加灵活的使用数组作为函数参数;

2.初步掌握开发一个小型实用系统的基本方法;

3.初步掌握书写程序设计开发文档的能力。

实验内容:

程序一:学生信息管理系统

编写程序,实现学生信息的管理(包括学生信息的建立、增加、删除、修改、查找),要求:

小组分工情况

小组分工情况统计表

一 需求分析

    I设计一个学生成绩管理系统至少具有以下功能:

(1)菜单功能:采用文本菜单界面。

(2)学生信息的建立。

(3)学生信息的增加。

(4)学生信息的删除。

(5)学生信息的修改。

(6)学生信息的查找。

II数据库结构

struct student

{ char num[10];

  char name[10];

  char xibie[10];

  char sex;

  int age; 

}st[30];

二 总体设计

框架结构图(系统的功能结构图)

程序流程图: (visio)

三、详细设计

(流程图!!!)

四、程序源代码(参考答案)

1.用结构体数组完成

2.用结构体指针完成

1. #include "stdio.h"

#include "string.h"

typedef struct node

{ char num[10];

  char name[10];

  char xibie[10];

  char sex;

  int age; 

}st;

int n;

st *creslink()

{

 int i;

 st s[10];

 printf("请输入要录入的人数:");

 scanf("%d",&n);

 for (i=0;i<=n-1;i++)

 { printf("请输入第%d名学生的学号,姓名,系别,年龄,性别:",i+1);

   scanf("%s%s%s%d%c",s[i].num,s[i].name,s[i].xibie,&s[i].age,&s[i].sex);

 }

 return s;

}

int getlen(st s[])

{

  return n;

}

insert(st s[],char num[],char name[],char xibie[],int age,char sex)

{ strcpy(s[n].num,num);

  strcpy(s[n].name,name);

  strcpy(s[n].xibie,xibie);

  s[n].age=age;

  s[n].sex=sex;

  n++;

}

delete(st s[],char num[])

{int i,j;

 for(i=0;i

   if(strcmp(s[i].num,num)==0)break;

  for(j=i+1;j

       s[j-1]=s[j];

  n--;

}

void list(st s[])

{ int i;

  printf("学号\t姓名\t系别\t年龄\t性别\n");

  for(i=0;i

   printf("%s\t%s\t%s\t%d\t%c\n",s[i].num,s[i].name,s[i].xibie,s[i].age,s[i].sex);    

}

void main()

{

 int k,f,age;

 char num[10],name[10],xibie[10],sex;

 st *s;

 while(1)

 {

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

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

 printf("\t\t\t1.录入学生信息\n");

 printf("\t\t\t2.插入新学生信息\n");

 printf("\t\t\t3.删除学生信息\n");

 printf("\t\t\t4.输出学生信息\n");

 printf("\t\t\t5.输出学生总数\n");

 printf("\t\t\t6.退出\n");

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

 printf("请选择:");

 scanf("%d",&k);

  switch(k)

 {case 1:s=creslink();break;

  case 2: printf("请输入新学生的学号,姓名,系别,年龄,性别:");

             scanf("%s%s%s%d%c",num,name,xibie,&age,&sex);

          insert(s,num,name,xibie,age,sex); 

          break;

  case 3:printf("请输入要删除的学生的学号:");

            scanf("%s",num);

         delete(s,num);

               break;

  case 4:list(s);break;

  case 5:f=getlen(s);printf("学生总数为:%d",f);break;

  case 6:return;

}

}

}

2.#include "stdio.h"

#include "string.h"

#define null 0

typedef struct node

{ char num[10];

  char name[10];

  char xibie[10];

  char sex;

  int age;

  struct node *next;

}slink;

slink *creslink()

{

slink *head,*p,*s;

int i,n;

printf("请输入要录入的人数:");

scanf("%d",&n);

if(n<1)

return null;

p=head=(slink *)malloc(sizeof(slink));

head->next=null;

for (i=1;i<=n;i++)

{

 s=(slink *)malloc(sizeof(slink));

   printf("请输入第%d名学生的学号,姓名,系别,年龄,性别:",i);

   scanf("%s%s%s%d%c",s->num,s->name,s->xibie,&s->age,&s->sex);

    p->next=s;

    p=s;

 }

 p->next=null;

 return head;

}

int getlen(slink *head)

{

slink *p;

  int n;

  p=head->next;

n=0;

  while (p!=null)

 {

n++; 

p=p->next;

}

  return n;

}

insert(slink *head,char num[],char name[],char xibie[],int age,char sex)

  slink *p,*q;

  p=head;

  while(p->next!=null)  p=p->next; 

  q=(struct node *)malloc (sizeof(slink));

  strcpy(q->num,num);

  strcpy(q->name,name);

  strcpy(q->xibie,xibie);

  q->sex=sex;

  q->age=age;

  q->next=p->next;

  p->next=q;

}

delete(slink *head,char num[])

{

slink *p,*q; 

  p=head;

  while(p->next!=null&&strcmp(p->next->num,num)!=0)

      p=p->next;  

  q=p->next;

  p->next=q->next; 

  free(q); 

}

void list(slink *head)

{

 slink *p;

  printf("学号\t姓名\t系别\t年龄\t性别\n");

  p=head->next;

  while(p!=null)

  {

    printf("%s\t%s\t%s\t%d\t%c\n",p->num,p->name,p->xibie,p->age,p->sex); 

    p=p->next;

  }

  printf("\n");

}

void main()

{

 int k,f,age;

 char num[10],name[10],xibie[10],sex;

 slink *head;

 while(1)

 {

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

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

 printf("\t\t\t1.录入学生信息\n");

 printf("\t\t\t2.插入新学生信息\n");

 printf("\t\t\t3.删除学生信息\n");

 printf("\t\t\t4.输出学生信息\n");

 printf("\t\t\t5.输出学生总数\n");

 printf("\t\t\t6.退出\n");

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

 printf("请选择:");

 scanf("%d",&k);

  switch(k)

 {case 1:head=creslink();break;

  case 2: printf("请输入新学生的学号,姓名,系别,年龄,性别:");

             scanf("%s%s%s%d%c",num,name,xibie,&age,&sex);

          insert(head,num,name,xibie,age,sex); 

          break;

  case 3:printf("请输入要删除的学生的学号:");

            scanf("%s",num);

         delete(head,num);

               break;

  case 4:list(head);break;

  case 5:f=getlen(head);printf("学生总数为:%d",f);break;

  case 6:return;

}

}

}

相关推荐