C语言课程设计——学生证管理系统

该课设还是大一的时候完成的,今天翻出来看到了,为了以后怀念,把它传上CSDN上

  1. 课程设计目的             ****************************************

  2. 课程内容及要求          ***************************************

  3. 需求分析                    ***************************************

  4. 总体分析                    ***************************************

  5. 详细设计                    ****************************************

 ——5.0头文件和结构体          *****************************************

 ——5.1读取文件函数               ***************************************

 ——5.2储存函数                     **************************************

 ——5.3输入模块                     ***************************************

 ——5.4修改信息模块                **************************************

 ——5.5删除模块                     *************************************

 ——5.6查找模块                     **************************************

 ——5.7统计模块                     *****************************************

 ——5.8退出系统                     ****************************************

  1. 上机操作                 ****************************************

  2. 总结                       ****************************************

  3. 源代码                   *****************************************

一、课程设计目的

     通过实践,学会编制结构清晰、风格良好、数据结构适当的c语言程序,加深对c语言基础知识的理解和掌握,进一步巩固c语言编程时间能力,锻炼思维逻辑和解决综合性实际问题的能力。

二、课程设计内容及要求

     1、设计内容

   用c语言编写程序设计一个学生证的管理程序。该程序具有以下功能:

  (1)录入某位学生的学生证信息(学生证应该包括的内容请参看自己的学生证);

  (2)给定学生的学号,修改该学生的学生证信息;

  (3)给定学生的学号,删除该学生的学生证信息;

  (4)根据输入的学生的学号,显示该学生的学生证信息;

  (5)根据输入的班级的编号,显示该班所有学生的学生证信息;

  (6)统计功能:提供一些统计各类信息的功能。

2、题目要求

  (1)按照分析、设计、编码、调试和测试过程完成应用程序;

  (2)学习并使用流程图等工具,并在撰写报告中使用;

  (3)程序的各项功能在程序运行时,以菜单方式选择并执行;

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

  (5)所有的信息存储在一个文件或多个中,并实现文件读写操作。

  (6)程序中用链表存放学生证信息并实现增删减功能。

三、需求分析

  要完成这个课程设计需要熟悉的掌握c语言的编写原理。要会熟练的运用数据结构、函数、文件的存储和读取、指针、以及相关语法和特殊用法。

四、总体分析

该管理系统是个较为简单的管理系统,该课程设计的主要目的是要求学生熟练的掌握c语言的编程。并不是要学生完成很复杂的程序,只是让学生能独立完成单个较为简单的程序。

该程序通过多个函数的完美结合,能把学生证管理系统完美的展现出来。并且通过多个有效的函数将其的管理体系展现的淋漓尽致。并且能实现多个不同的功能,以此来完善学生证管理系统的不足。

 
 

五、详细设计

5.0头文件与结构体:

#include <stdio.h>

#include <string.h>

#include <conio.h>

#include <stdlib.h>

#define M 3

typedef struct

{

     charname[20];//姓名

     charxingbie[5];//性别

     charminzu[5];//民族

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

   int num;  //学号

     charzhuanye[20];//专业课

     charaddress[20];//地址

     chardatein[15];//入学日期

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

   

   

 }STUDENTS;   //结构体类型

5.1读文件函数

int read_file(STUDENTS student[])

{

     FILE*fp;

     inti=0;

     if((fp=fopen("projectchoose.txt","rt"))==NULL)

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

     return0;

     }

     while(feof(fp)!=1)

     {fread(&student[i],sizeof(STUDENTS),1,fp);

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

     break;

     else

     i++;

}

     fclose(fp);

     returni;

}          //如果存在该文件就将其读出来,如果没有就创建一个文件,然后再读取文件

5.2储存函数

oid save_file(STUDENTS student[],int sum)       //储存学生的学生证信息

{

     FILE*fp;

     inti;

     if((fp=fopen("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);

}

    

5.3输入函数

int input(STUDENTS student[])     //输入正确的学生证信息

{

     inti=0;

     system("cls");

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

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

     do

     {

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

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

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

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

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

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

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

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

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

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

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

          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();

     returni;

}

5.4//修改信息模块                 根据信息的正误修改已经输入的信息

void modify(STUDENTS student[],int sum)

{

     inti=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("%ld %3s %5s %5s %s %5s %5s %s%s\n",student[i].num,student[i].name,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    请选择所需一项:\n");

                scanf("%d",&choice);

                switch(choice)

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

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

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

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

                case3:printf("\n      请输入正确的性别:");

                scanf("%c",student[i].xingbie);break;

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

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

                case5:printf("\n      请输入修改后的出生日期:");

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

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

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

                case7:printf("\n      请输入修改后的家庭住址:");

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

                case8:printf("\n      请输入修改后的入校时期:");

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

                case9:printf("\n      请输入修改后的填发时期:");

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

                }

                fflush(stdin);

                getch();

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

                printf("学号——姓名—性别—民族——出生日期——专业——家庭住址——入校时期——填发时期\n");

                printf("%ld%3s %5s %5s %s %5s %5s %s%s\n",student[i].num,student[i].name,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");

                getchar(choice);

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

               {flag=1;

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

                }

                else

                     flag=0;}

                while(flag==1);

                fflush(stdin);

                getch();

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

                getchar();

}

5.5//删除模块

voiddel(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("%ld %3s %5s %5s %s %5s %5s %s%s\n",student[i].num,student[i].name,student[i].xingbie,student[i].minzu,student[i].birthday,student[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;}

}

5.6//查找模块

void find(STUDENTSstudent[],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("%ld %3s %5s %5s %s %5s%5s %s%s\n",student[i].num,student[i].name,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();

                system("cls");

          }

          fflush(stdin);

          getchar();

}

 5.7//统计模块

voidsort(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("%ld %3s %5s %5s %s %5s %5s %s%s\n",student[i].num,student[i].name,student[i].xingbie,student[i].minzu,student[i].birthday,student[i].zhuanye,student[i].address,student[i].datein,student[i].fadate);

       printf("%ld",student[i].num);

     }

     fflush(stdin);

     getch();

}

 六、上机操作

 

 

七、总结

    经过这么多天的努力这份课程设计算是圆满完成了。通过这个简单的课程设计,让我深刻的体会到要想学好c语言这门课程是非常不容易的。在这个课程设计里把c语言的精华全部都体现出来了,让我看到了c语言的诱人之处,看到了它的神奇之处。

在这短短的几天里我也深刻的体会到作为一个程序员是多么辛苦的是,整天都是对着电脑敲程序,有时候半天都不抬一下头,完全沉静在自己的程序世界里,仿佛整个世界都与他无关似的。这也更加充分的说明了那句话:程序员是孤独的。“众里寻他千百度,蓦然回首,那人还在敲程序。。。。。。”

八、源程序如下

 

#include<stdio.h>

#include<string.h>

#include<conio.h>

#include<stdlib.h>

#define M 3

typedef struct

{

     char name[20];//姓名

     char xingbie[5];//性别

     char minzu[5];//民族

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

   int num;  //学号

     char zhuanye[20];//专业课

     char address[20];//地址

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

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

   

   

 }STUDENTS;

intread_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;

}

voidsave_file(STUDENTS student[],int sum)

{

     FILE *fp;

     int i;

     if((fp=fopen("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);

}

    

//输入模块

intinput(STUDENTS student[])

{

     int i=0;

     system("cls");

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

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

     do

     {

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

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

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

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

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

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

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

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

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

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

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

          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;

}

//修改信息模块

voidmodify(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("%ld%3s %5s %5s %s %5s %5s %s %s\n",student[i].num,student[i].name,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    请选择所需一项:\n");

                scanf("%d",&choice);

                switch(choice)

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

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

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

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

                case 3:printf("\n      请输入正确的性别:");

                scanf("%c",student[i].xingbie);break;

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

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

                case 5:printf("\n      请输入修改后的出生日期:");

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

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

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

                case 7:printf("\n      请输入修改后的家庭住址:");

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

                case 8:printf("\n      请输入修改后的入校时期:");

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

                case 9:printf("\n      请输入修改后的填发时期:");

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

                }

                fflush(stdin);

                getch();

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

                printf("学号——姓名—性别—民族——出生日期——专业——家庭住址——入校时期——填发时期\n");

                printf("%ld %3s %5s %5s %s%5s %5s %s%s\n",student[i].num,student[i].name,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");

                getchar(choice);

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

                {flag=1;

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

                }

                else

                     flag=0;}

                while(flag==1);

                fflush(stdin);

                getch();

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

                getchar();

}

//删除模块

voiddel(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("%ld %3s %5s %5s %s %5s %5s %s%s\n",student[i].num,student[i].name,student[i].xingbie,student[i].minzu,student[i].birthday,student[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;}

}

//查找模块

voidfind(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("%ld %3s %5s %5s %s %5s%5s %s %s\n",student[i].num,student[i].name,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();

                system("cls");

          }

          fflush(stdin);

          getchar();

}

//统计模块

voidsort(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("%ld %3s %5s %5s %s %5s %5s %s%s\n",student[i].num,student[i].name,student[i].xingbie,student[i].minzu,student[i].birthday,student[i].zhuanye,student[i].address,student[i].datein,student[i].fadate);

       printf("%ld",student[i].num);

     }

     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);

}

分享个C/C++学习交流QQ群:389318488,群内提供免费教学视频及资料编译器及源代码等等,有大牛解答疑问,能给你提供职业生涯的一些建议!

猜你喜欢

转载自blog.csdn.net/qq_42784210/article/details/81286269