文档视界 最新最全的文档下载
当前位置:文档视界 › 学生信息管理系统程序

学生信息管理系统程序

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

.

C语言上机实践报告

专业:冶金工程

班级:冶金1102

姓名:

学号:

任课教师:丽华

时间:2012年8月

一、题目

学生信息管理系统设计

●学生信息包括:学号,姓名,年龄,性别,出生年月,地址,,E-mail等。

●试设计一学生信息管理系统,使之能提供以下功能:

a)系统以菜单方式工作

b)学生信息录入功能(学生信息用文件保存)---输入

c)学生信息浏览功能---输出

d)查询、排序功能---算法

(1) 按学号查询

(2) 按姓名查询

e)学生信息的删除与修改(可选项)

一、系统功能模块结构图

二、数据结构设计及用法说明#include"stdio.h"

#include"stdlib.h"

#include"string.h"

/*定义结构体用作创建链表*/

typedef struct z1

{

char no[11]; //学生学号

char name[15]; //学生姓名

int age; //学生年龄

char sex; //学生性别

char birthday[8]; //学生出生年月char address[20]; //学生住址

char tel[12]; //学生联系

char e_mail[20]; //学生e-mail

struct z1 *next; //指向下一链表}STUDENT;

/*声明用户自定义函数*/

STUDENT *init();

STUDENT *create();

STUDENT *del(STUDENT *h);

STUDENT *insert(STUDENT *h);

STUDENT *revise(STUDENT *h);

void print(STUDENT *h);

void search1(STUDENT *h);

void search2(STUDENT *h);

void save(STUDENT *h);

int menu_select();

void inputs(char *prompt,char *s,int count);

/*主函数,用于选择功能*/

void main()

{

STUDENT *head;

head=init(); //初始化链表表头

for(;;)

{

switch(menu_select())

{

case 0:head=init();break; //初始化

case 1:head=create();break; //创建列表

case 2:head=insert(head);break; //插入节点

case 3:save(head);break; //以文件形式保存

case 4:print(head);break; //显示

case 5:search1(head);break; //搜索学号

case 6:search2(head);break; //搜索姓名

case 7:head=del(head);break; //删除

case 8:head=revise(head);break; //修改

case 9:exit(0); //退出程序

}

}

}

/*目录选择函数,返回用户输入的数字*/

int menu_select()

{

char *menu[]={"************菜单************",

"0. 初始化链表",

"1. 输入学生信息",

"2. 插入学生信息",

"3. 保存学生信息",

"4. 显示学生信息",

"5. 按学号查找学生信息",

"6. 按姓名查找学生信息",

"7. 删除指定学号的学生信息",

"8. 修改指定学号的学生信息",

"9. 退出系统"};

int c,i;

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

printf(" %s\n",menu[i]);

do

{

printf("\n请选择0~9中的某一个选项:\n");

scanf("%d",&c);

}while(c<0||c>10);

return c;

}

/*初始化函数,作用是返回空指针初始化链表*/ STUDENT *init()

{

return NULL;

}

/*创建函数,输入学生信息*/

STUDENT *create()

{

STUDENT *h=NULL,*info;

for(;;)

{

info=(STUDENT *)malloc(sizeof(STUDENT));

if(!info)

{

printf("\n存不足");

return NULL;

}

inputs("输入学号:",info->no,11);

if(info->no[0]=='@')break;

inputs("输入姓名:",info->name,15);

printf("输入年龄:");

scanf("%d",&info->age);

printf("输入性别编号(0.男1.女):");

scanf("%s",&info->sex);

printf("输入出生年月(XXXX/XX):");

scanf("%s",info->birthday);

inputs("输入地址:",info->address,20);

inputs("输入:",info->tel,12);

inputs("输入E-mail:",info->e_mail,20);

info->next=h;

h=info;

}

return h;

}

/*输入函数,用于判断输入的字符是否超出程序定义避免数据溢出*/ void inputs(char *prompt,char *s,int count)

{

char p[255];

do

{

printf(prompt);

scanf("%s",p);

if(strlen(p)>count)

printf("\n太长了!\n");

}while(strlen(p)>count);

strcpy(s,p);

}

/*插入函数,插入学生成绩*/

STUDENT *insert(STUDENT *h)

{

STUDENT *p,*q,*info;

char s[11];

printf("请输入插入点的学生学号\n");

scanf("%s",s);

printf("\n请输入新的学生信息\n");

info=(STUDENT *)malloc(sizeof(STUDENT));

inputs("输入学号:",info->no,11);

inputs("输入姓名:",info->name,15);

printf("输入年龄:");

scanf("%d",&info->age);

printf("输入性别编号(0.男1.女):");

scanf("%s",&info->sex);

printf("输入出生年月(XXXX/XX):");

scanf("%s",info->birthday);

inputs("输入地址:",info->address,20);

inputs("输入:",info->tel,12);

inputs("输入E-mail:",info->e_mail,20);

info->next=NULL;

p=h;

q=h;

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

{

q=p;

p=p->next;

}

if(p==NULL)

if(p==h)

h=info;

else

q->next=info;

else if(p==h)

{

info->next=p;

h=info;

}

else

{

info->next=p;

q->next=info;

}

printf("\n已经插入了%s这个学生\n",info->name); return(h);

}

/*保存函数,以文件的形式保存学生信息*/

void save(STUDENT *h)

{

FILE *fp;

STUDENT *p;

char outfile[50];

printf("请输入保存文件的文件名,例如c:\\f1\\te.txt:\n");

scanf("%s",outfile);

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

{

printf("不能打开文件\n");

exit(1);

}

printf("\n正在保存......\n");

p=h;

while(p!=NULL)

{

fwrite(p,sizeof(STUDENT),1,fp);

p=p->next;

}

fclose(fp);

printf("------保存成功!!!------\n");

}

/*显示函数,显示学生信息*/

void print(STUDENT *h)

{

int i=0;

STUDENT *p;

p=h;

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

printf("|学号| 姓名|年龄|性别|出生年月| 地址| | E-mail |\n");

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

while(p!=NULL)

{

i++;

printf("|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|\n",p->no,p->name,p->age,p-> sex,p->birthday,p->address,p->tel,p->e_mail);

p=p->next;

}

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

}

/*搜索函数,按学号搜索学生信息并显示*/

void search1(STUDENT *h)

{

STUDENT *p;

char s[11];

printf("请输入你要查找的同学的学号\n");

scanf("%s",s);

p=h;

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

p=p->next;

if(p==NULL)

printf("'n没有学号为%s的学生\n",s);

else

{

printf("\n\n\n****************************找到了

***************************************\n");

printf("|学号| 姓名|年龄|性别|出生年月| 地址| | E-mail |\n");

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

printf("|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|\n",p->no,p->name,p->age,p-> sex,p->birthday,p->address,p->tel,p->e_mail);

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

}

}

/*搜索函数,按姓名搜索学生信息并显示*/

void search2(STUDENT *h)

{

STUDENT *p;

char s[15];

printf("请输入你要查找的同学的姓名\n");

scanf("%s",s);

p=h;

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

p=p->next;

if(p==NULL)

printf("'n没有姓名为%s的学生\n",s);

else

{

printf("\n\n\n*******************************找到了************************************\n");

printf("|学号| 姓名|年龄|性别|出生年月| 地址| | E-mail |\n");

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

printf("|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|\n",p->no,p->name,p->age,p-> sex,p->birthday,p->address,p->tel,p->e_mail);

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

}

}

/*删除函数,删除指定学号的学生信息*/

STUDENT *del(STUDENT *h)

{

STUDENT *p,*q;

char s[11];

printf("请输入要删除的学生的学号\n");

scanf("%s",s);

q=p=h;

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

{

q=p;

p=p->next;

}

if(p==NULL)

printf("\n链表中没有学号为%s的学生\n",s);

else

{

printf("\n\n\n********************************找到了***********************************\n");

printf("|学号| 姓名|年龄|性别|出生年月| 地址| | E-mail |\n");

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

printf("|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|\n",p->no,p->name,p->age,p-> sex,p->birthday,p->address,p->tel,p->e_mail);

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

printf("请按任意键删除\n");

getchar();

if(p==h)

h=p->next;

else

q->next=p->next;

free(p);

printf("\n已经删除学号为%s的学生\n",s);

}

return h;

}

/*修改函数,修改指定学号的学生信息*/

STUDENT *revise(STUDENT *h)

{

STUDENT *p,*q;

char s[11];

printf("请输入您希望修改的学生学号\n");

scanf("%s",s);

printf("\n 请输入新的学生信息\n");

p=h;

q=h;

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

{

q=p;

p=p->next;

}

inputs("输入学号:",p->no,11);

inputs("输入姓名:",p->name,15);

printf("输入年龄:");

scanf("%d",&p->age);

printf("输入性别编号(0.男1.女):");

scanf("%s",&p->sex);

printf("输入出生年月(XXXX/XX):");

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

inputs("输入地址:",p->address,20);

inputs("输入:",p->tel,12);

inputs("输入E-mail:",p->e_mail,20);

return (h);

}

三、程序结构

相关文档