*大一下高程的课设
只能使用C语言
尽管还有许多不足,还是在这里存一下叭!
题目描述
设计一个学生证的管理程序。该程序具有以下功能:
(1)录入某位学生的学生证信息(学生证应该包括的内容请参看自己的学生证);
(2)给定学生的学号,修改该学生的学生证信息;
(3)给定学生的学号,删除该学生的学生证信息;
(4)根据输入的学生的学号,显示该学生的学生证信息;
(5)根据输入的班级的编号,显示该班所有学生的学生证信息;
(6)统计功能:提供一些统计各类信息的功能。
题目要求
(1)按照分析、设计、编码、调试和测试过程完成应用程序;
(2)学习并使用流程图等工具,并在撰写报告中使用;
(3)程序的各项功能在程序运行时,以菜单方式选择并执行;
(4)要求用户输入数据时,要给出清晰、明确的提示,包括:输入数据的内容、格式及结束方式等
(5)所有的信息存储在一个文件或多个中,并实现文件读写操作。
(6)程序中用链表存放学生证信息并实现增删减功能。(必须)
整体结构图
流程图
个人想法
其实做这个程序还是比较水的,没有太多的思考,只顾着主要功能(想尽快完成:-P)。比较特别的(?)大概就是除了必要实现的功能以外,考虑到了修改后必须要保存的情况,为了提高友好性,在答辩前临时添加了一个保存提示(在退出管理模块/本程序的时候,若已进行了信息修改而未保存,将提示保存),此外每个功能也有继续操作等比较友好的设置。统计功能也尽量想了很多。
不足
答辩后老师提出的几点可以改进的地方:
- 排序功能(完完全全没考虑到啊!!)
- 录入完毕后显示信息进行确认
- 修改时的确认(防止修改错误)
- 录入时的随时退出
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct node
{
char name[20];//姓名
char sex[10];//性别
long long num;//学号
char data[20];//入学日期
int school_system;//学制(学习年限)
char collge[50];//学院
char major[50];//专业
int cla;//班级
char id[50];//身份证
struct node *next; //链表指针域
}students;
//extern students* student_list;
students* student_list;
int save_flag;
int student_list_empty()
{
return student_list->next == NULL;
}
//根据学号查找学生信息
students *search_student_info(long long num)
{
students *stu;
stu=student_list->next;
while(stu&&stu->num!=num)
{
stu=stu->next;
}
return stu;
}
void menu1()
{
printf("\n========主菜单=========\n| |\n");
printf("| 1.管理学生证信息 |\n");
printf("| |\n| 2.查询学生证信息 |\n");
printf("| |\n| 3.统计学生证信息 |\n");
printf("| |\n| 0.退出系统操作 |\n");
printf("| |\n=======================\n\n");
}
void menu2()
{
printf("\n========管理学生证信息=========\n\n");
printf(" 1.添加学生证信息\n");
printf("\n 2.修改学生证信息\n");
printf("\n 3.删除学生证信息\n");
printf("\n 4.保存学生证信息\n");
printf("\n 0.返回主菜单\n");
printf("\n===============================\n\n");
}
void menu3()
{
printf("\n========查询学生证信息=========\n\n");
printf(" 1.查询单个学生证信息\n");
printf("\n 2.查询班级全部学生证信息\n");
printf("\n 0.返回主菜单\n");
printf("\n===============================\n\n");
}
void init()//初始化学生信息
{
student_list=(students*)malloc(sizeof(students));
student_list->next = NULL;
}
int input()//录入学生证信息
{
int i=1;
char ch;
int f=0;
system("cls");//清屏
printf("\n=================================***录入须知***=================================\n");//给使用者备注录入要求,便于统一信息录入格式
printf("\n1.请按要求输入学生的学生证信息\n2.学生入学日期以xxxx.xx.xx为格式(例如:2019.09.01)\n3.学生学制及所属班级只需输入数字即可(例如学生在1班,则只需输入1即可。)\n4.*切记!录入信息或更改信息后在退出本系统前要在主页面选择保存数据,否则本次操作数据将丢失!\n5.学院专业名称请统一输入标准全称,否则将影响数据统计!\n");
do
{
printf("\n==============================================================================\n");
printf("\n=======***开始录入学生证信息(若要返回菜单请输入0)***=======\n");
printf("-------------------------------------------------------------------------------------\n");
students *stu=(students*)malloc(sizeof(students));
if(stu==NULL)
{
printf("内存分配失败\n");
return 0;
}
printf("\n现在开始录入第%d个学生的学生证信息\n",i);
printf("学生学号:\n");
scanf("%lld",&stu->num);
if(stu->num==0)return 0;
if((search_student_info(stu->num))!=NULL)
{
printf("该学号已经存在学生信息表中!请重新输入。\n");
continue;
}
printf("\n学生姓名:\n");
scanf("%s",stu->name);
//gets(stu->name);
printf("\n学生性别:\n");
scanf("%s",stu->sex);
//gets(stu->sex);
printf("\n学生入学日期:\n");
scanf("%s",stu->data);
//gets(stu->data);
printf("\n学生学制:\n");
scanf("%d",&stu->school_system);
printf("\n学生所属学院:\n");
scanf("%s",stu->collge);
//gets(stu->collge);
printf("\n学生所属专业:\n");
scanf("%s",stu->major);
//gets(stu->major);
printf("\n学生所在班级:\n");
scanf("%d",&stu->cla);
printf("\n学生身份证号码:\n");
scanf("%s",stu->id);
//gets(stu->id);
i++;
stu->next=student_list->next;
student_list->next=stu;
printf("*****该学生的学生证信息已成功录入!*****\n");
save_flag=0;
printf("====*****是否继续录入学生证信息?*****====\n");
printf("*是:请输入0 *否:请输入1\n");
scanf("%d",&f);
}
while(!f);
printf("\n**********%d个学生的学生证信息已成功录入!**********\n",i-1);
//printf("\n=========按回车键返回菜单!===========\n");
//getch();
return 1;
}
int modify()//修改学生证信息
{
int choice,f=0;
long long modify_num;
while(f==0)
{
system("cls");
printf("======*****请输入要修改的学生学号(若要返回菜单请输入0)*****======\n");
scanf("%lld",&modify_num);
if(modify_num==0)return 0;
students *stu = search_student_info(modify_num);
if(stu!=NULL)
{
printf("\n\n--------------------当前学生信息---------------------\n\n");
printf("学生姓名:\n");
printf("%s\n",stu->name);
printf("\n学生性别:\n");
printf("%s\n",stu->sex);
printf("\n学生学号:\n");
printf("%lld\n",stu->num);
printf("\n学生入学日期:\n");
printf("%s\n",stu->data);
printf("\n学生学制:\n");
printf("%d\n",stu->school_system);
printf("\n学生所属学院:\n");
printf("%s\n",stu->collge);
printf("\n学生所属专业:\n");
printf("%s\n",stu->major);
printf("\n学生所在班级:\n");
printf("%d\n",stu->cla);
printf("\n学生身份证号码:\n");
printf("%s\n",stu->id);