C语言课程设计-学生证管理系统(源码+报告)

学生证信息管理系统

一、目的要求

本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计,并能最终实现本系统的功能要求。

二、功能要求

题目描述:

假设某单位学生证基本信息主要包括:学号、姓名、班级、专业、籍贯等,本系统应能对这些基本信息进行管理,并要求具有以下功能

(1)、能通过键盘输入学生的学生证信息;

(2)、给定学号显示某位学生的信息;

(3)、给定某个班级的班级号,显示该班级所有学生的信息;

(4)、给定某位学生的学生号,能修改该学生的信息。

题目要求:

(1)、为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项希望进行的操作项目;

(2)、学生信息按学号查询或删除、排序功能按学号从小到大排列。

(3)、要求以上功能分别用函数实现。并要求用C语言的文件操作语句将以上结果把存在projectchoose.txt。

输入输出要求:

(1)、应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目,进入每个操作系统后,程序的提示输入相应的信息;

(2)、要求用户输入数据时,要给出清晰明确的提示信息,包括输入的数据内容、格式及结束方式等。

三、功能分析

①、建立结构体数组来保存学生信息;

②、设计好菜单界面并用system("cls");语句来清空屏幕,使得用户每次进行一次操作都能清空当前屏幕而不会让界面太乱;

③、设计好相应的提示语句方便用户操作;

④、在输出数据时规定数据长短以设计好布局,使得查找结果清晰明了;

⑤、设计多个函数模块来分别实现读取文件、输入信息、查找信息、修改信息等。

四、算法设计

⑴、结构体模块

typedef struct

{

char name[20];//姓名

int cla;//班级

char xingbie[5];//性别

char minzu[5];//民族

char birthday[15];//出生日期

char zhuanye[20];//专业

char address[20];//籍贯

char datein[15];//入学日期

char fadate[15];//填发日期

}STUDENTS;

⑵、输入模块

建立函数用for语句逐个输入学生信息。N-S流程图如下:

i=0
i<M(M为学生总数)
 输入第i个学生的信息
i=i+1

⑶、修改模块

建立函数用for语句逐个查找学生学号直到找到用户想找的学生后,输出该学生的所有信息,询问并修改用户想要修改的该学生的信息。N-S流程图如下:

输入想要修改的学生的学号n
i=0
当i<M
 i=n是 否
输出学号为n的学生的信息并修改 
i=i+1

⑷、查找模块

用for语句逐个查找所输入学号的学生的相关信息。N-S流程图如下:

输入想要查找的学生的学号n
i=0
当i<M
 i=n是 否
输出学号为n的学生的信息 
i=i+1

⑸、统计模块

用for语句输出学生信息并以学号大小顺序排列,来达到统计所有学生信息的目的。N-S流程图如下:

i=0
i<M(M为学生总数)
 输出第i个学生的信息
i=i+1

  1. 主菜单设计

*****************学生信息****************

  1. 修改学生信息
  2. 删除学生信息
  3. 查找学生信息
  4. 所有学生信息
  5. 退出系统

请选择

六、调试结果

以学生总数为1(即M=1)查找所有学生信息为例:

按提示输入学生信息,截图如下:

按回车键返回菜单,截图如下:

输入4后按回车键清除屏幕再显示所有学生的信息,截图如下:


七、结果分析

①、运用了结构体简化了程序;

③、菜单界面首行没有居中显得不够美观;

④、为了后面的for语句,学号定义为了整型,使得输出学号时,以0开头的学号的第一个0无法输出。

八、心得体会

此次设计的学生征信息管理系统满足课题的功能要求。但是也有很多不够完美的地方。代码有些地方过于冗长,界面不够美观等都是需要改进的地方。希望在今后更进一步的中逐渐解决这些问题。

在运用当前所学知识无法解决所遇到的问题的时候,需要充分运用课外知识。

在这次的课程实验中,花了比较长的时间,让我深刻明白了实践出真知和孰能生巧的道理。


九、源程序

/*学生证信息管理系统*/

#include<stdio.h>

#include<string.h>

#include<conio.h>

#include<stdlib.h>

#define M 1

typedef struct

{

int num;//学号

char name[20];//姓名

int cla;//班级

char xingbie[5];//性别

char minzu[5];//民族

char birthday[15];//出生日期

char zhuanye[20];//专业

char address[20];//籍贯

char datein[15];//入学日期

char fadate[15];//填发日期

}STUDENTS;

int read_file(STUDENTS student[])

{

FILE *fp;

int i=0;

if((fp=fopen("projectchoose.txt","rt"))==NULL) //判断打开文件是否

为空

{

printf("\n\n******无学生信息存在!请创建******");

return 0;

}

while(feof(fp)!=1) //判断文件是否结束

{

fread(&student[i],sizeof(STUDENTS),1,fp); //从文件中读取数据if(student[i].num==0) break;

else i++;

}

fclose(fp); //关闭文件

return i;

}

void save_file(STUDENTS student[],int sum)

{

FILE *fp;

int i;

if((fp=fopen("d:\\projectchoose.txt","wb"))==NULL) //判断打开文件是否为空

{

printf("读信息错误!\n");

return ;

}

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

if(fwrite(&student[i],sizeof(STUDENTS),1,fp)!=1) //判断是否输入了正 确的信息

printf("写信息错误!\n");

fclose(fp); //关闭文件

}

//输入模块

int input(STUDENTS student[])

{

int i=0;

system("cls"); //清空屏幕

printf(" 输入的学生数(最多为%d个)\n",M);

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

do

{

printf("\n 第%d个学生",i+1);

printf("\n 学生学号:");

scanf("%d",&student[i].num);

printf("\n 学生姓名:");

scanf("%s",&student[i].name);

printf("\n 学生班级:");

scanf("%d",&student[i].cla);

printf("\n 学生性别:");

scanf("%s",&student[i].xingbie);

printf("\n 学生民族:");

scanf("%s",&student[i].minzu);

printf("\n 出生日期:");

scanf("%s",&student[i].birthday);

printf("\n 学生专业:");

scanf("%s",&student[i].zhuanye);

printf("\n 学生籍贯:");

scanf("%s",&student[i].address);

printf("\n 学生的入学日期:");

scanf("%s",&student[i].datein);

printf("\n 学生证填发日期:");

scanf("%s",&student[i].fadate);

i++;

}while(i<M);

fflush(stdin);

getch();

printf("\n **********%d个学生的学生证信息输入完毕**********\n",i);

printf("\n 按回车键返回菜单!");

getchar();

return i;

}


//修改信息模块

void modify(STUDENTS student[],int sum)

{

int i=0,choice,modify_num,flag;

do

{

system("cls");

printf("\n请输入要修改的学生学号:");

scanf("%d",&modify_num);

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

if(student[i].num==modify_num)

{

printf("\n\n -----------------------学生信息------------------------\n\n");

printf("学号 姓名 班级 性别 民族 出生日期 专业 籍贯 入学日期 填发日期\n");

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

printf("%4d %4s %4d %4s %4s %8s %8s %8s %8s %8s\n",

student[i].num,student[i].name,student[i].cla,student[i].xingbie,student[i].minzu,student[i].birthday,student[i].zhuanye,student[i].address,student[i].datein,student[i].fadate);

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

printf("\n 您要修改哪一项?\n");

printf("\n 1.学号\n");

printf("\n 2.姓名\n");

printf("\n 3.班级\n");

printf("\n 4.性别\n");

printf("\n 5.民族\n");

printf("\n 6.出生日期\n");

printf("\n 7.专业\n");

printf("\n 8.籍贯\n");

printf("\n 9.入学日期\n");

printf("\n 10.填发时期\n");

printf("\n 请选择所需一项:\n");

scanf("%d",&choice);

switch(choice)

{

case 1:printf("\n 请输入修改后的学号:");

scanf("%d",&student[i].num);break;

case 2:printf("\n 请输入修改后的姓名:");

scanf("%s",student[i].name);break;

case 3:printf("\n 请输入修改后的班级:");

scanf("%d",student[i].cla);break;

case 4:printf("\n 请输入修改后的性别:");

case 5:printf("\n 请输入修改后的民族:");

scanf("%s",student[i].minzu);break;

case 6:printf("\n 请输入修改后的出生日

期:");

scanf("%s",student[i].birthday);break;

case 7:printf("\n 请输入修改后的专业:");

scanf("%s",student[i].zhuanye);break;

case 8:printf("\n 请输入修改后的籍贯:");

scanf("%s",student[i].address);break;

case 9:printf("\n 请输入修改后的入学日

期:");

scanf("%s",student[i].datein);break;

case 10:printf("\n 请输入修改后的填发日

期:");

scanf("%s",student[i].fadate);break;

}

fflush(stdin); //清除缓存

getch();

printf("\n\n ***************学生信息***************

\n\n");

printf("学号 姓名 班级 性别 民族 出生日期

专业 籍贯 入学日期 填发日期\n");

printf("%4d %4s %4d %4s %4s %8s %8s %8s %8s %8s\n",student[i].num,student[i].name,student[i].cla,student[i].xingbie,student[i].minzu,student[i].birthday,student[i].zhuanye,student[i].address,student[i].datein,student[i].fadate);

printf("--------------------------------------------

----\n");

break;

}

else

{

printf("\n 该学生不存在!");

getchar();

}

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

printf(" 您要继续修改吗?(Y/N)\n");

choice=getchar();

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

{

flag=1;

printf("\n 继续!\n");

}

else

flag=0;

}while(flag==1);

fflush(stdin); //清除缓存

getch()

printf("\n 按回车键返回主菜单!");

getchar();

}


//删除模块

void del(STUDENTS student[])

{

int i,g,sum;

int del_num;

{system("cls"); //清空屏幕

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

scanf("%d",&del_num);

fflush(stdin); //清除缓存

getch();

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

if(student[i].num==del_num)

g=i;

for(g=i;g<sum;g++)

student[g+1]=student[g];

fflush(stdin); //清除缓存

getch();

{

printf("这是您所要删除的学生信息:\n\n");

printf("学号 姓名 班级 性别 民族 出生日期

专业 籍贯 入学日期 填发日期\n\n");

printf("%4d %4s %4d %4s %4s %8s %8s %8s %8s

%8s\n",student[i].num,student[i].name,student[i].cla,stu

dent[i].xingbie,student[i].minzu,student[i].birthday,studen

t[i].zhuanye,student[i].address,student[i].datein,student[i].

fadate);

printf("-------------------------------------------

------------------------\n");

fflush(stdin); 清除缓存

getch();

printf("您确定要删除这个信息?\n");

printf("按回车键继续!");

getchar();

fflush(stdin); //清除缓存

getch();

printf("已成功删除信息!");

}

student[i].num=0;

}

}


//查找模块

void find(STUDENTS student[],int sum)

{

int i,find_num;

system("cls"); //清空屏幕

printf("请输入要查找的学生学号:");

fflush(stdin); //清除缓存

scanf("%d",&find_num);

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

if(student[i].num==find_num)

{

printf("这是您要找的学生信息:\n");

printf("学号 姓名 班级 性别 民族 出生日期 专

业 籍贯 入学日期 填发日期\n");

printf("%4d %4s %4d %4s %4s %8s %8s %8s %8s %8

s\n",student[i].num,student[i].name,student[i].cla,student[i].xin

gbie,student[i].minzu,student[i].birthday,student[i].zhuanye,stu

dent[i].address,student[i].datein,student[i].fadate);

printf("-----------------------------------------------

-\n");

break;

}

else

{

printf("\n ------未找到相关学生信息!按回车键返回!------");

getchar();

system("cls"); //清空屏幕

}

fflush(stdin);清除缓存

getchar();

}


//统计模块

void sort(STUDENTS student[],int sum)

{

STUDENTS t;

int i,j,k;

system("cls");

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

printf("\n学号 姓名 班级 性别 民族 出生日期 专业 籍

贯 入学日期 填发日期\n\n");

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

{

k=1;

for(j=i+1;j<sum;j++)

if(student[k].num>student[j].num)

{

t=student[j];

student[j]=student[k];

student[k]=t;

} // 依据学号从小到大输出学生信息

}

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

{

printf("%4d %4s %4d %4s %4s %8s %8s %8s %8s %8s\n"

,student[i].num,student[i].name,student[i].cla,student[i].xingbie,stu

dent[i].minzu,student[i].birthday,student[i].zhuanye,student[i].add

ress,student[i].datein,student[i].fadate);

}

fflush(stdin); //清除缓存

getch();

}


//主函数

void main()

{

STUDENTS student[M];

int choice,sum;

sum=read_file(student);

if(sum==0)

{

printf("\n********请输入学生基本信息!*******\n\n");

getch();

sum=input(student);

}

Do

{

system("cls");

printf("\n\n\n*********************学生的信息***************** \n\n");

printf(" 1.修改学生信息\n\n");

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

printf(" 3.查找学生信息\n\n");

printf(" 4.所有学生的信息\n\n");

printf(" 0.退出系统\n\n");

printf(" 请选择\n\n");

scanf("%d",&choice);

switch(choice)

{

case 1: modify(student,sum);break;

case 2: del(student); break;

case 3: find(student,sum); break;

case 4: sort(student,sum); break;

case 0: break;}

}

while(choice!=0);

save_file(student,sum);

}

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值