1、C语言课程设计 学生信息管理系统 姓 名 洪伟生 院 系 计 算 机 学 院 日 期 年 7 月 5 日 目 录 第一章 设计规定 ……………………………………………… 第二章 算法分析 1. 理论根据………………………………………………… 2. 重要实现措施……………………………………………
2、2.1 整体流程图……………………………………… 2.2 函数功能和函数之间旳调用关系……………… 第三章 代码(源代码)……………………………………… 第四章 分析阐明……………………………………………… 第五章 总结…………………………………………………… 第一章、 设计规定 1、运用所学旳知识、理论和实际结合,运用资源,采用模块化旳构造,使用模仿修改自主设计相结合旳措施,锻炼学生综合分析解决实际问题旳编程能力; 2、通过C语言各个函数功能来实现对学生信息旳管理,学生信息涉及学生姓名,学号,各科成绩;管理方式涉及对学生信息旳录入,保存,排序,查找、修改
3、删除等功能。 第二章、 算法分析 1、程序理论根据 通过C语言旳程序设计基本旳掌握,对学生成绩管理系统进行编写程序。一方面,通过链表这一数据构造来对学生旳信息进行录入以及操作,在其过程中,通过各个功能语句以及选择构造,循环构造等方式旳结合来达到所要实现旳程序功能。最后通过对C语言中对文献旳操作,对已有学生成绩旳读取和新建学生成绩旳录入保存。 2、重要实现措施 2.1整体流程图 学生信息管理系统 学生信息删除 返回主菜单 学生信息增长 学生信息修改 学生信息查找 学生信息浏览 学生信息录入 进入 退出 2.2、函
4、数功能和函数之间旳调用关系 2.2.1、函数功能: void Menu_1(); //主菜单 void Menu_2(); //二级菜单 void swap(struct student * phead,struct student * pback); // 链表节点互换 void Save(struct student * head); // 写入磁盘
5、 void Search(struct student * head); // 查找学生信息 void Read(struct student * head); // 显示学生信息 void Sort(struct student * head); // 链表节点排序 struct student * Create(); // 学生信息手动录入 struct studen
6、t * Readpoint(); // 磁盘文献写入内存 struct student * Modify(struct student * head); // 链表构造体成员修改 struct student * Add(struct student * head); // 链表节点插入 struct student * Delete(struct student * head); // 链表节点删除
7、 2.2.2、函数之间旳调用关系: 通过switch语句进行指令选择: case 1: 学生信息录入 调用函数 Create( )、Save( )、Menu_1( )、Menu_2( ) case 2: 学生信息浏览 调用函数 Readpoint( )、Sort( )、Read( )、Save( )、Menu_1( )、Menu_2( ) case 3: 学生信息查找 调用函数 Search( )、Readpoint( )、Menu_1( )、Menu_2( ) case 4: 学生信息修改 调用函数 Modify( )、Readpoint( )、Sav
8、e( )、Menu_1( )、Menu_2( )
case 5: 学生信息增长
调用函数 Add( )、 Readpoint( )、Save( )、Menu_1( )、Menu_2( )
case 6: 学生信息删除
调用函数 Delete( ) 、Readpoint( )Save( )、Menu_1( )、Menu_2( )
case 0: 返回主菜单
调用函数 Menu_1( )
第三章、 代码(源代码)
/*
学生信息管理系统
*/
#include 9、h>
#include 10、t student * phead,struct student * pback); // 链表节点互换
void Save(struct student * head); // 写入磁盘
void Search(struct student * head); // 查找学生信息
void Read(struct student * head); // 显示学生信息
void Sort(struct student * he 11、ad); // 链表节点排序
struct student * Readpoint(); // 磁盘文献写入内存
struct student * Create(); //学生信息手动录入
struct student * Modify(struct student * head); // 链表构造体成员修改
struct student * Add(struct student * head); 12、 // 链表节点插入
struct student * Delete(struct student * head); // 链表节点删除
int main(void)
{
Menu_1();
return 0;
}
void Menu_1()
{
int num;
printf("\t\t\t\t 学生信息管理系统\t\t\t\t\n");
printf("\t\t\t 1: 进入学生信息管理\n"); //主菜单
printf("\t\t\t 13、 0: 退出学生信息管理\n");
printf("请您输入指令:");
scanf("%d",&num);
switch(num)
{ case 1:Menu_2();
break;
default:printf("-----------------------------------------您已退出学生信息管理系统-----------------------------------------------\n");
break;
}
}
/*----------------------------------------------------- 14、/
void Menu_2()
{
struct student * head;
int num;
printf("\t\t\t 欢迎进入\n");
printf("-----------------------------------------------------------------------------------------------------------------------\n");
pr 15、intf("\t\t\t 1: 学生信息录入\n");
printf("\t\t\t 2: 学生信息浏览\n");
printf("\t\t\t 3: 学生信息查找\n");
printf("\t\t\t 4: 学生信息修改\n"); //二级菜单
printf("\t\t\t 5: 学生信息增长\n");
printf("\t\t\t 6: 学生信息删除\n");
printf("\t\t\t 0: 返回主菜单\n");
printf("------------------------------- 16、\n");
printf("请您输入指令:");
scanf("%d",&num);
switch(num)
{
case 1:{
head = Create();
Save(head);
printf("\n");
printf("\t\t\t 1: 返回主菜单\n"); //手动录入学生数据
p 17、rintf("\t\t\t 2: 返回二级菜单\n");
printf("\n");
printf("请您输入指令:");
scanf("%d",&num);
switch(num)
{
case 1:Menu_1();
break;
case 2:Menu_2();
break;
default :
{
printf("输入无效,返回二级菜单!\n");
Menu_2();
}
break;
}
}
break;
case 2:{
head = Readpoint(); 18、 //写入链表,返回头指针
Sort(head);
printf("\t\t\t 以学号升序排列\n");
Read(head); // 链表数据写入文献
Save(head);
printf("\n");
printf("\t\t\t 1: 返回主菜单\n");
printf("\t\t\t 2: 返回二级菜单\n");
prin 19、tf("\n");
printf("请您输入指令:");
scanf("%d",&num);
switch(num)
{
case 1:Menu_1();
break;
case 2:Menu_2();
break;
default :
{
printf("输入无效,返回二级菜单!\n");
Menu_2();
}
break;
}
}
break;
case 3:{
head = Readpoint();
Search(head); 20、 //查找学生信息
printf("\n");
printf("\t\t\t 1:返回主菜单\n");
printf("\t\t\t 2:返回二级菜单\n");
printf("\n");
printf("请您输入指令:");
scanf("%d",&num);
switch(num)
{
case 1:Menu_1();
break;
case 2:Menu_2();
break;
default :
{
printf("输入无效,返回二级菜单!\n");
Menu_2();
}
break;
21、 }
}
break;
case 4:{
head = Readpoint();
Modify(head); //修改构造体成员并保存到文献
Save(head);
printf("\n");
printf("\t\t\t 1: 返回主菜单\n");
printf("\t\t\t 2: 返回二级菜单\n");
printf("\n");
printf("请您输入指令:");
scanf("%d",&num);
switch(num)
{
case 1:Menu_1();
break;
case 22、 2:Menu_2();
break;
default :
{
printf("输入无效,返回二级菜单!\n");
Menu_2();
}
break;
}
}
break;
case 5:{
head = Readpoint();
Add(head); //增长学生信息并保存到文献
Save(head);
printf("\n");
printf("\t\t\t 1:返回主菜单\n");
printf("\t\t\t 2:返回二级菜单\n");
printf("\n");
23、printf("请您输入指令:");
scanf("%d",&num);
switch(num)
{
case 1:Menu_1();
break;
case 2:Menu_2();
break;
default :
{
printf("输入无效,返回二级菜单!\n");
Menu_2();
}
break;
}
}
break;
case 6:{
head = Readpoint();
head = Delete(head); //删除学生信息并保存到文献
Sa 24、ve(head);
printf("\n");
printf("\t\t\t 1:返回主菜单\n");
printf("\t\t\t 2:返回二级菜单\n");
printf("\n");
printf("请您输入指令:");
scanf("%d",&num);
switch(num)
{
case 1:Menu_1();
break;
case 2:Menu_2();
break;
default :
{
printf("输入无效,返回二级菜单!\n");
Menu_2();
}
break;
}
25、
}
break;
case 0: Menu_1();
break;
default :{
printf("请重新输入\n");
Menu_2();
}
break;
}
}
/*---------------------------------------------------------------------------------------------------------------------------------------*/
struct student * Create() 26、 //学生信息手动录入
{
struct student *head,* p,* q;
int n;
p = q = (struct student *)malloc(sizeof(struct student));
printf("请输入学生旳姓名、学号、性别、语文成绩、高等数学成绩、英语成绩:\n");
scanf("%s",q->name);
scanf("%d %s %d %d %d",&q->num,&q->sex,&q->Chinese,&q->Math,&q->English); 27、
n = 0;
head =NULL;
while (q->num != 0)
{
n = n+1;
if (n == 1)
head = q;
else
p->next = q;
p = q;
q = (struct student *)malloc(sizeof(struct student));
scanf("%s",q->name);
scanf("%d %s %d %d %d",&q->num,q->sex,&q->Chinese,&q->Mat 28、h,&q->English);
}
p->next = NULL;
printf("学生信息录入成功!\n");
return head;
}
/*----------------------------------------------------------------------------------------------------------------------------------------*/
struct student * Readpoint() 29、 //学生信息写入内存,便于操作
{
FILE * fp1;
struct student *head,* p,* q;
int n;
if((fp1 = fopen("E:test.txt","rb")) == NULL)
{
printf("open file error!\n");
exit(0);
}
p = q = (struct student *)malloc(sizeof(struct student));
fscanf(fp1,"%s %d %s %d 30、 %d %d",q->name,&q->num,q->sex,&q->Chinese,&q->Math,&q->English);
n = 0;
head =NULL;
while( !feof(fp1))
{
n = n+1;
if (n == 1)
head = q;
else
p->next = q;
p = q;
q = (struct student *)malloc(sizeof(struct student));
fscanf(fp1,"%s %d %s %d %d %d",&q->name,&q->n 31、um,&q->sex,&q->Chinese,&q->Math,&q->English);
}
p->next = NULL;
fclose(fp1);
return head;
}
/*----------------------------------------------------------------------------------------------------------------------------------------*/
void Swap(struct student * phead, struct studen 32、t * pback) //链表元素数据互换
{
struct student * temp = (struct student *)malloc(sizeof(struct student));
strcpy(temp->name,phead->name);
temp->num = phead->num;
strcpy(temp->sex,phead->sex);
temp->Chinese = phead->Chinese;
temp->Math = phead->Math;
temp->English = p 33、head->English;
strcpy(phead->name,pback->name);
phead->num= pback->num;
strcpy(phead->sex,pback->sex);
phead->Chinese = pback->Chinese;
phead->Math = pback->Math;
phead->English = pback->English;
strcpy(pback->name,temp->name);
pback->num = temp->num;
strcpy(pback->sex, 34、temp->sex);
pback->Chinese = temp->Chinese;
pback->Math = temp->Math;
pback->English = temp->English;
free(temp);
}
/*----------------------------------------------------------------------------------------------------------------------------------------*/
void Sort(struct student * 35、 head) // 学号排序
{
struct student * phead = (struct student *)malloc(sizeof(struct student));
struct student * pback = (struct student *)malloc(sizeof(struct student));
phead = head;
while (phead)
{
int Num = phead->num;
pback = phead->next;
while(pbac 36、k)
{
if( Num > pback->num)
{
Swap(phead,pback);
Num = phead->num;
}
pback = pback->next;
}
phead = phead->next;
}
}
/*------------------------------------------------------------------------------------------------------------- 37、/
void Read(struct student * head) //学生信息读取
{
struct student * p;
p = head;
printf("------------------------------------------------------------------------------------------------------------------------\n");
printf("学生旳姓名 、 学号 38、 性别 、语文成绩 、 高等数学成绩 、 英语成绩:\n");
while(p != NULL)
{
printf(" %s \t%d\t%s \t %d \t %d \t\t %d\n",p->name,p->num,p->sex,p->Chinese,p->Math,p->English);
p = p->next;
}
printf("---------------------------------------------------------------------------------------------------------- 39、\n");
}
/*----------------------------------------------------------------------------------------------------------------------------------------*/
void Save(struct student * head) //学生信息保存到文献
{
struct student * p;
FILE * fp;
if((fp = fopen( 40、"E:test.txt","wb")) == NULL)
{
printf("open file error!\n");
exit(0);
}
p = head;
while(p !=NULL)
{
fprintf(fp,"%s %d %s %d %d %d",p->name,p->num,p->sex,p->Chinese,p->Math,p->English);
fprintf(fp,"%s","\r\n");
p = p->next;
}
fclose(fp);
} 41、
/*----------------------------------------------------------------------------------------------------------------------------------------*/
void Search(struct student * head) //学生信息查找
{
int n;
struct student * p;
char name[24];
int num;
char sex[5];
42、
int Chinese;
int Math;
int English;
printf("您想以何种方式进行查找:\n");
printf("1;姓名\n");
printf("2:学号\n");
printf("3:性别\n");
printf("4:语文成绩\n");
printf("5:数学成绩\n");
printf("6:英语成绩\n");
printf("0:返回二级菜单\n");
scanf("%d",&n);
switch(n)
{
case 1:{
printf("请输入姓名:"); 43、 //按姓名查找
scanf("%s",name);
p = head;
while(strcmp(name,p->name)!=0 && p->next != NULL)
p = p->next;
if(strcmp(name,p->name)==0)
printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math,p->English);
else
printf("查无此人!\n");
44、}
break;
case 2:{
printf("请输入学号:"); //按学号查找
scanf("%d",&num);
p = head;
while(num != p->num && p->next != NULL)
p = p->next;
if(num == p->num)
printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math,p->English);
els 45、e
printf("查无此人!\n");
}
break;
case 3:{
printf("请输入性别:"); //按性别查找
scanf("%s",sex);
p = head;
while(p!= NULL)
{
if(strcmp(sex,p->sex)==0)
printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math,p->English);
p = p 46、>next;
}
}
break;
case 4:{
printf("请输入语文成绩:"); //按语文成绩查找
scanf("%d",&Chinese);
p = head;
while(p!= NULL)
{
if(Chinese == p->Chinese)
printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math,p->English);
p = p->next; 47、
}
}
break;
case 5:{
printf("请输入高等数学成绩:"); //按高等数学成绩查找
scanf("%d",&Math);
p = head;
while(p!= NULL)
{
if(Math == p->Math)
printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math,p->English);
p = p->next;
}
}
48、 break;
case 6:{
printf("请输入英语成绩:"); //按英语成绩查找
scanf("%d",&English);
p = head;
while(p!= NULL)
{
if(English == p->English)
printf("%s %d %s %d %d %d\n",p->name,p->num,p->sex,p->Chinese,p->Math,p->English);
p = p->next;
}
}
break 49、
default:{
printf("指令错误返回二级菜单!\n");
Menu_2();
}
break;
}
}
/*----------------------------------------------------------------------------------------------------------------------------------------*/
struct student * Modify(struct student * head)
{ int n;
struct studen 50、t * p;
char name[24];
int num;
printf(" 您想以何种方式进行修改:\n");
printf("1;姓名\n");
printf("2:学号\n");
printf("0:返回二级菜单\n");
scanf("%d",&n);
switch(n)
{
case 1:{
printf("请输入姓名:"); //按姓名查找后修改信息
scanf("%s",name);
p = head;
while(strcmp(name,p->name)!=0 && p->next






