设计并编写一个学生信息管理系统

zhangpeng0122 2010-11-05 08:48:35
设计并编写一个学生信息管理系统,要求至少存放10名学生的信息。每个学生必须有的信息有:序号、姓名、成绩1、成绩2。按照下面的要求完成程序,其中函数名已经给定,使用的参数及类型自行确定。
必须实现的功能:
一 数据的输入:用StuAdd为函数名,完成向系统中添加学生信息的功能
二 数据的查询:用StuSearch为函数名,完成根据序号来查询该学生的所有信息的功能
三 数据的修改:用StuModify为函数名,完成对某个学生信息的修改功能
四 数据的删除:用StuDel为函数名,完成删除指定学生信息的功能
五 数据的显示:用StuDisplay为函数名,完成将全部学生信息在屏幕上显示的功能,每个学生的信息占一行

附加功能
一 数据的插入:用StuInsert为函数名,完成对指定位置,如在某个学生之前插入新学生信息的功能
二 数据的排序:用StuSort为函数名,根据指定的内容进行由小到大输出,可以选择序号,成绩1,成绩2。如给入的参数为1则使用序号排序
2则使用成绩1排序
3则使用成绩2排序
...全文
811 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kent0122 2010-11-06
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
#define Max 10
struct List /*节点声明*/
{
int number;
char name[Max];
int chji1,chji2,chji3;
struct List *Next;
};
typedef struct List Node;
typedef Node *kent;

/*********************成绩录入***********************/
void StuAdd(kent Head)
{
char DataName[Max];
kent New;
kent Pointer;
int i,DataNum=0;
int chengji1,chengji2;
int chengji3;
kent p=Head;

if(p==NULL)
{
printf("请先选择输入数据选项,因为还没有数据\n");
getchar();
return;
}

while(p->Next!=NULL)
p=p->Next;
DataNum=p->number;
Pointer=p;
while(1)
{
DataNum++;
printf("请输入学生姓名:");
scanf("%s",DataName);
if
('0' == DataName[0]) break; /*输入0就结束*/
printf("请输入学生语文成绩:");
scanf("%d",&chengji1);
printf("请输入学生数学成绩:");
scanf("%d",&chengji2);
printf("请输入学生英语成绩:");
scanf("%d",&chengji3);

New =(kent) malloc(sizeof(Node));
if
(New==NULL)
{printf("内存分配失败,程序退出!");
getchar();
exit(0);}
New->chji1 = chengji1;
New->chji2 = chengji2;
New->chji3 = chengji3;
New->number = DataNum;
for(i=0;i<Max;i++)
{
New->name[i]=DataName[i];
}
New->Next = NULL;
Pointer->Next = New;
Pointer = New;

}

}


/********************释放链表*********************/
void StuFree(kent Head)
{
kent Pointer; /*节点声明*/
while (Head != NULL)
{
Pointer = Head;
Head = Head->Next;
free(Pointer);
}
}


/*********************成绩查找********************/
kent StuSearch(kent Head)
{
kent p1,p2;
int flag;
char c;
flag=0;
printf("请输入学生姓名首字母:\t");
scanf("%c",&c);getchar();
p1=Head;
while( p1!=NULL)
{
if (p1->name[0]==c)
{
printf("姓名:%s\t语文:%d\t数学:%d\t 英语:%d\n",p1->name,p1->chji1,p1->chji2,p1->chji3);
flag=1;
}
p2=p1;p1=p1->Next;
}
if(flag==0)
printf("未找到符合记录!\n");

return Head;
}


/*****************************成绩删除*********************/
void StuDelete(kent * pHead)
{
kent Pointer;
kent back;
int key;
int flag=0,index=0;
Pointer =(*pHead);
if(Pointer==NULL)
{
printf("无记录!删除失败!Press Enter to return\n");
getchar();return;}
printf("请输入要删除记录的学生序号:");
scanf("%d",&key);
while(Pointer!=NULL)
{ index++;
if(Pointer->number==key){flag=1;break;}
back=Pointer;
Pointer=Pointer->Next;
}
if(flag)
{
if(index==1){back=(*pHead);(*pHead)=back->Next;
}
else
{
back->Next=Pointer->Next;back=Pointer;}
free(back);

printf("删除成功\n");
}
else{printf("未找到!\n");}
}


/********************************显示成绩******************************/
void StuPrint(kent Head)
{
kent p=Head;
printf("********************************************************************************\n");
printf("显示结果是:\n");
printf("序号\t姓名\t语文成绩\t数学成绩\t英语成绩\n");
while(p!=NULL)
{
printf("%d\t%s\t %d\t\t %d\t\t %d\n",p->number,p->name,p->chji1,p->chji2,p->chji3);
p=p->Next; /*指向下一个节点*/
}
}



/**********************************插入数据**********************************/
kent Stuinsert(void)
{
char DataName[Max];
kent New;
kent Pointer;
int i,DataNum=0;
int chengji1,chengji2,chengji3;
kent Head=NULL;
{Head =(kent) malloc(sizeof(Node));
if(Head == NULL)
printf("Memory allocate Failure!!\n");}

printf("\t\t输入0完成学生信息的写入\n");
while(1)
{
DataNum++;
printf("请输入学生姓名:");
scanf("%s",DataName);
if('0' == DataName[0]) break; /*输入0就保存学生信息*/
printf("请输入学生语文成绩:");
scanf("%d",&chengji1);
printf("请输入学生数学成绩:");
scanf("%d",&chengji2);
printf("请输入学生英语成绩:");
scanf("%d",&chengji3);

New =(kent) malloc(sizeof(Node));
if(New==NULL)
{
printf("内存分配失败,程序退出!");
getchar();exit(0);}
New->chji1 = chengji1;
New->chji2 = chengji2;
New->chji3 = chengji3;
New->number = DataNum;
for(i=0;i<Max;i++)
{
New->name[i]=DataName[i];
}
New->Next = NULL;
if(DataNum==1)
{
Head=New;Pointer=New;
}
else{
Pointer->Next = New;
Pointer = New;
}
}
return Head;
}

/*************************成绩修改***************************/
kent StuModify(kent Head)
{
kent p1,p2;
int mode;
int key;
printf("请输入要修改记录的学生序号:");
scanf("%d",&key);
p1=Head;
while(1)
{

if(key == p1->number)
{
printf("%d\t1.姓名:%s\t2.语文成绩:%d\t3.数学成绩:%d\t4.英语成绩\n",p1->number,p1->name,p1->chji1,p1->chji2,p1->chji3);
printf("请选择要修改选项:\n");
scanf("%d",&mode);getchar();
if(mode==1)
{
printf("请输入修改后的姓名: ");
scanf("%s",p1->name);getchar();
}
else if(mode==2)
{
printf("请输入修改后的语文成绩: ");
scanf("%d",&p1->chji1);getchar();
}
else if(mode==3)
{
printf("请输入修改后的数学成绩: ");
scanf("%d",&p1->chji2);getchar();
}
else if(mode==4)
{
printf("请输入修改后的英语成绩: ");
scanf("%d",&p1->chji3);getchar();
}



else
printf("输入有误!\n");break;
}
p2=p1;p1=p1->Next;
if(p1==NULL)
{
printf("未找到符合要求的记录!\n");break;}
}
return Head;
}

/*********************************主程序*********************************/
main()
{
kent Head=NULL,new1,ptr;
int num;
int key;
int choise;
int info=1;

while(info)
{
printf("\t\t\t 学生成绩管理系统\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\t\t 1.输入");
printf("\t\t\t\t 2.显示\n");
printf("\t\t 3.查找");
printf("\t\t\t\t 4.修改\n");
printf("\t\t 5.插入 ");
printf("\t\t\t 6.删除\n");
printf("\t\t\t 7.退出\n");
printf("\n");
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");


printf("请选择(1-7):");
scanf("%d",&choise);getchar();
switch(choise)
{
case 1: Head=Stuinsert();
break;
case 2: StuPrint(Head);
break;
case 3: StuSearch(Head);
break;
case 4: StuModify(Head);
break;
case 5:StuAdd(Head);
break;
case 6: StuDelete(&Head);
break;
case 7:
info=0;
break;
default :printf("输入错误,请重新输入!\n");
}
}
StuFree(Head);
}
elegant87 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 manuky 的回复:]

#include <stdio.h>
刚学了结构体 所以就做了一个

请多指教哈


#include <stdlib.h>
#include <string.h>

//定义链表结构
struct student
{
int num;
char name[8];
struct student *next;
}stu……
[/Quote]
这个可以参考的
manuky 2010-11-05
  • 打赏
  • 举报
回复
#include <stdio.h>
刚学了结构体 所以就做了一个

请多指教哈


#include <stdlib.h>
#include <string.h>

//定义链表结构
struct student
{
int num;
char name[8];
struct student *next;
}stu;


//函数说明
struct student *create_list();//建立空链表
int insert_list(struct student *head,struct student *std,int n);//向链表插入新节点
int del_list(struct student *head,struct student *std);//删除链表节点
struct student *find_list(struct student *head,struct student *std);//查找指定的节点
void brow_list(struct student *head);//浏览链表
void stumenu();

int main()
{
struct student *head;
struct student newstd;
int choice;
head=NULL;
printf(" 学生信息系统\n");
printf("1 建立链表\n");
printf("2 插入新生\n");
printf("3 查找学生\n");
printf("4 删除学生\n");
printf("5 数据浏览\n");
printf("0 退出程序\n");

do
{
printf("请选择操作(0-5)\n");
scanf("%d",&choice);
if(choice>5 || choice<0)
{
printf("输入错误\n");
continue;
}
switch(choice)
{
case 1:
if(head==NULL)
head=create_list();
stumenu();
break;
case 2:
if(head==NULL)
{
printf("链表未建立!\n");
break;
}
while(1)
{
printf("学号(输入0结束)!:");
scanf("%d",&newstd.num);
if(newstd.num==0)
break;
printf("姓名(输入0结束)!:");
scanf("%s",&newstd.name);
insert_list(head,&newstd,-1);
}
stumenu();
break;
case 3:
stumenu();
printf("输入姓名:");
scanf("%s",newstd.name);
find_list(head,&newstd);

break;
case 4:
printf("输入姓名:");
scanf("%s",newstd.name);
del_list(head,&newstd);
stumenu();
break;
case 5:
brow_list(head);
stumenu();
break;
default:
stumenu();
return 0;
}
}
while(1);
return 0;
}

void stumenu()
{
system("cls");
printf(" 学生信息系统\n");
printf("1 建立链表\n");
printf("2 插入新生\n");
printf("3 查找学生\n");
printf("4 删除学生\n");
printf("5 数据浏览\n");
printf("0 退出程序\n");
}
struct student *create_list()
{
struct student *head;
head=(struct student *)malloc(sizeof(struct student));
if(head!=NULL)
printf("链表已建立!\n");
else
printf("链表建立失败!\n");
head->next=NULL;
head->num=0;
return head;
}

int insert_list(struct student *head,struct student *std,int n)
{
struct student *p,*q,*s;
s=(struct student *)malloc(sizeof(struct student));
if(s==NULL)
{
printf("链表建立失败!\n");
return 0;
}
q=head;
p=head->next;
while(p!=NULL && n!=q->num)
{
q=p;
p=p->next;
}
q->next=s;
s->next=p;
strcpy(s->name,std->name);
s->num=std->num;
return 1;

}

struct student *find_list(struct student *head,struct student *std)
{
struct student *p;
p=head;
while(p!=NULL && strcmp(p->name,std->name))
p=p->next;
if(p!=NULL)
printf("学号:%d 姓名:%s\n",p->num,p->name);
else
printf("查无此人!\n");
return p;
}

int del_list(struct student *head,struct student *std)
{
struct student *p,*q;
q=head;
p=head->next;
while(p!=NULL && strcmp(p->name,std->name))
{
q=p;
p=p->next;
}
if(p!=NULL)
{
q->next=p->next;
free(p);
printf("删除完成!\n");
return 1;
}
else
{
printf("查无此人!\n");
return 0;
}
}

void brow_list(struct student *head)
{
struct student *p;
p=head->next;
while(p!=NULL)
{
printf("学号:%d 姓名:%s\n",p->num,p->name);
p=p->next;
}
}
yiruirui0507 2010-11-05
  • 打赏
  • 举报
回复
http://wenku.baidu.com/view/df13191c59eef8c75fbfb375.html
streamcc 2010-11-05
  • 打赏
  • 举报
回复
用 struct 和 单链表 做喽
kent0122 2010-11-05
  • 打赏
  • 举报
回复
作业自己要学着写呀,不懂的再来问

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧