#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <conio.h>
typedef struct data//定义包含学生证信息的结构体
{
char name[ 10 ];//姓名
char sex[ 5 ];//性别
char number[50];//学号
char date[50];//入学时间
char xueyuan[ 50 ];//所属学院
char banji[ 50 ];//所属班级
struct data *next;//连接下一个结构体
}STUDENT;
// 结构体存储班级和人数
typedef struct {
char className[50];
int count;
} ClassInfo;
// 将链表内容存储到文件
void set(STUDENT *head) {
STUDENT *current = head;
FILE *file = fopen("Student.csv", "w");
if (file == NULL) {
printf("错误,无法打开文件!\n");
return;
}
while (current != NULL) {
fprintf(file, "%s,%s,%s,%s,%s,%s\n", current->name, current->sex, current->number, current->date, current->xueyuan, current->banji);
current = current->next;
}
fclose(file);
}
// 初始化链表,返回头节点指针
STUDENT *initList() {
STUDENT *head = (STUDENT *)malloc(sizeof(STUDENT));
if (head == NULL) {
printf("错误,初始化失败!\n");
exit(EXIT_FAILURE);
}
head->next = NULL; // 确保头节点的指针指向NULL
return head;
}
// 从文件中读取数据到链表
STUDENT *get() {
STUDENT *head = initList();//初始化链表头
STUDENT *current = NULL;
char line[255];
FILE *file = fopen("Student.csv", "r");
if (file == NULL) {
printf("错误,无法打开文件!\n");
return NULL;
}
//逐行读取并添加到链表中
while (fgets(line, sizeof(line), file) != NULL) {
STUDENT *newStudent = (STUDENT *)malloc(sizeof(STUDENT));
if (newStudent == NULL) {
printf("内存分配错误!\n");
return NULL;
}
sscanf(line, "%[^,],%[^,],%[^,],%[^,],%[^,],%[^\n]", newStudent->name, newStudent->sex, newStudent->number, newStudent->date, newStudent->xueyuan, newStudent->banji);
newStudent->next = NULL;
if (current == NULL) {
head = newStudent; // 第一个节点
current = head;
} else {
current->next = newStudent;
current = newStudent;
}
}
fclose(file);
return head;
}
// 辅助函数,验证日期格式是否正确
int isValidDate(const char *date) {
int year, month, day;
if (sscanf(date, "%d/%d/%d", &year, &month, &day) == 3) {
if (year >= 0 && month >= 1 && month <= 12 && day >= 1 && day <= 31) {
return 1; // 日期格式正确
}
}
printf("错误,日期格式不正确!\n");
return 0;
}
// 辅助函数,检查学号是否唯一
int isUniqueNumber(STUDENT *head, const char *number) {
STUDENT *current = head->next;
while (current != NULL) {
if (strcmp(current->number, number) == 0) {
printf("错误!该学号已存在\n");
return 0; // 学号不唯一
}
current = current->next;
}
return 1; // 学号唯一
}
// 1.在链表末尾添加一条数据
void add(STUDENT *head) {
// 创建新节点
STUDENT *newStudent = (STUDENT *)malloc(sizeof(STUDENT));
STUDENT *current = head;//链表尾
if (newStudent == NULL) {
printf("内存分配错误。\n");
exit(EXIT_FAILURE);
}
printf("添加学信息\n");
// 获取用户输入
printf("请输入学生姓名:");
scanf("%s", newStudent->name);
printf("请输入学生性别:");
scanf("%s", newStudent->sex);
// 验证学号唯一性
do {
printf("请输入学生学号:");
scanf("%s", newStudent->number);
} while (!isUniqueNumber(head, newStudent->number));
// 验证日期格式正确性
do {
printf("请输入学生入学日期(格式:2022/10/1):");
scanf("%s", newStudent->date);
} while (!isValidDate(newStudent->date));
printf("请输入学生所属学院:");
scanf("%s", newStudent->xueyuan);
printf("请输入学生所属班级:");
scanf("%s", newStudent->banji);
newStudent->next = NULL;
// 找到链表末尾并添加新节点
if(head==NULL){
head=newStudent;
}else{
while (current->next != NULL) {
current = current->next;
}
}
current->next = newStudent;
printf("学生信息添加成功。\n");
}
// 2.根据学号查找学生信息并打印
void find(STUDENT *head) {
STUDENT *current = head;
char number[50];
printf("查询个人学信息\n");
printf("请输入要查找的学号:");
scanf("%s", number);
while (current != NULL) {//遍历查询
if (strcmp(current->number, number) == 0) {
printf("学生信息找到:\n");
printf("姓名:%s\n性别:%s\n学号:%s\n入学日期:%s\n所属学院:%s\n所属班级:%s\n",
current->name, current->sex, current->number, current->date, current->xueyuan, current->banji);
return;
}
current = current->next;
}
printf("未找到学号为 %s 的学生信息。\n", number);
}
//3.根据班级查找学生信息
void findClass(STUDENT *head){
STUDENT *current = head;
char banji[50];
int flag=0;//判断存在条件
printf("查询班级学生信息\n");
printf("请输入要查找的班级:");
scanf("%s", banji);
while (current != NULL) {//遍历查询
if (strcmp(current->banji, banji) == 0) {
printf("-------------------------------------------------------------------------\n");
printf("姓名:%s\n性别:%s\n学号:%s\n入学日期:%s\n所属学院:%s\n所属班级:%s\n",
current->name, current->sex, current->number, current->date, current->xueyuan, current->banji);
flag=1;
}
current = current->next;
}
if(flag==0){
printf("未找到班级为 %s 的学生信息。\n", banji);
}
}
// 4.根据学号修改学生信息
void changedata(STUDENT *head) {
STUDENT *current = head->next;
char number[50];
int operation;
printf("修改学信息\n");
// 获取用户输入
printf("请输入要修改信息的学生学号:");
scanf("%s", number);
// 查找学生信息
while (current != NULL) {
if (strcmp(current->number, number) == 0) {
// 学生信息找到,接收用户输入的操作编号
printf("学生信息找到,请选择要修改的操作:\n");
printf("1. 修改姓名\n2. 修改性别\n3. 修改入学日期\n4. 修改所属学院\n5. 修改所属班级\n");
printf("请输入操作编号:");
scanf("%d", &operation);
switch (operation) {
case 1:
printf("请输入新的姓名:");
scanf("%s", current->name);
printf("姓名修改成功。\n");
break;
case 2:
printf("请输入新的性别:");
scanf("%s", current->sex);
printf("性别修改成功。\n");
break;
case 3:
do {
printf("请输入新的入学日期(格式:2022/10/1):");
scanf("%s", current->date);
} while (!isValidDate(current->date));
printf("入学日期修改成功。\n");
break;
case 4:
printf("请输入新的所属学院:");
scanf("%s", current->xueyuan);
printf("所属学院修改成功。\n");
break;
case 5:
printf("请输入新的所属班级:");
scanf("%s", current->banji);
printf("所属班级修改成功。\n");
break;
default:
printf("无效的操作编号。\n");
break;
}
return;
}
current = current->next;
}
printf("未找到学号为 %s 的学生信息,无法进行修改。\n", number);
}
// 5.删除指定学号的学生数据
void deldata(STUDENT *head) {
STUDENT *current = head;
STUDENT *prev = NULL;
char number[50];
printf("删除学信息\n");
printf("请输入要删�
没有合适的资源?快使用搜索试试~ 我知道了~
C语言期末/课程设计:学生证管理程序(vc2010项目)
共106个文件
tlog:76个
manifest:4个
pdb:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 195 浏览量
2024-03-15
20:04:15
上传
评论
收藏 1013KB RAR 举报
温馨提示
题目描述: 请设计一个学生证管理的程序,以方便辅导员对学生证的管理,该程序应该具有以下功能: (1)能从键盘输入某位学生的学生证信息(学生证应该包含的信息可以参考自己的学生证)。 (2)给定学号,显示该学生的学生证信息。 (3)给定班号,显示该班所有学生的学生证信息。 (4)给定学号,修改该学生的学生证信息。 (5)给定学号,删除该学生的学生证信息。 题目要求: (1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。 (2)学生证应该包含的信息参考自己的学生证。 (3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。 扩展功能: (1)提供一些统计功能。例如统计每个班学生的人数,统计男女生比例。 (2)学生证信息从文件读入。 (3)将学生证信息保存到文件中。
资源推荐
资源详情
资源评论
收起资源包目录
C语言期末/课程设计:学生证管理程序(vc2010项目) (106个子文件)
test.c 12KB
学生证管理系统.vcxprojResolveAssemblyReference.cache 713B
Student.csv 146B
学生证管理系统.exe 38KB
学生证管理程序.exe 38KB
学生证管理系统.vcxproj.filters 940B
vc100.idb 35KB
学生证管理系统.ilk 353KB
学生证管理程序.ilk 346KB
学生证管理程序-dcef3513.ipch 2.44MB
学生证管理程序.lastbuildstate 65B
学生证管理系统.lastbuildstate 65B
学生证管理系统.log 3KB
学生证管理程序.exe.embed.manifest 406B
学生证管理系统.exe.embed.manifest 406B
学生证管理系统.exe.intermediate.manifest 381B
学生证管理程序.exe.intermediate.manifest 381B
test.obj 45KB
学生证管理系统.pdb 443KB
学生证管理程序.pdb 435KB
vc100.pdb 60KB
学生证管理系统_manifest.rc 204B
学生证管理程序_manifest.rc 204B
学生证管理系统.exe.embed.manifest.res 472B
学生证管理程序.exe.embed.manifest.res 472B
学生证管理系统.sdf 2.33MB
学生证管理系统.sln 935B
学生证管理系统.suo 10KB
link.read.1.tlog 5KB
link.command.1.tlog 3KB
CL.read.1.tlog 1KB
link.write.1.tlog 1KB
rc.command.1.tlog 926B
mt.command.1.tlog 706B
cl.command.1.tlog 574B
mt.read.1.tlog 498B
mt.write.1.tlog 498B
rc.write.1.tlog 458B
rc.read.1.tlog 442B
CL.write.1.tlog 230B
link.17600-cvtres.read.1.tlog 2B
link.8716-cvtres.write.1.tlog 2B
link.6548.write.1.tlog 2B
link.17604-cvtres.write.1.tlog 2B
link.7240-cvtres.write.1.tlog 2B
link.6580-cvtres.write.1.tlog 2B
link.13932.write.1.tlog 2B
link.7420.read.1.tlog 2B
link.6580.write.1.tlog 2B
link.17600.read.1.tlog 2B
link.6548.read.1.tlog 2B
link.13788-cvtres.read.1.tlog 2B
link.12884-cvtres.read.1.tlog 2B
link.1948-cvtres.read.1.tlog 2B
link.1032-cvtres.read.1.tlog 2B
link.1032-cvtres.write.1.tlog 2B
link.15064.read.1.tlog 2B
link.8716.read.1.tlog 2B
link.15064-cvtres.write.1.tlog 2B
link.11984.write.1.tlog 2B
link.11984.read.1.tlog 2B
link.15064-cvtres.read.1.tlog 2B
link.1948.write.1.tlog 2B
link.7420.write.1.tlog 2B
link.7240.write.1.tlog 2B
link.13932.read.1.tlog 2B
link.1032.read.1.tlog 2B
link.7240.read.1.tlog 2B
link.17604.write.1.tlog 2B
link.11984-cvtres.write.1.tlog 2B
link.8716-cvtres.read.1.tlog 2B
link.9092-cvtres.write.1.tlog 2B
link.12884.read.1.tlog 2B
link.1032.write.1.tlog 2B
link.7240-cvtres.read.1.tlog 2B
link.1948.read.1.tlog 2B
link.6548-cvtres.write.1.tlog 2B
link.17600.write.1.tlog 2B
link.9092.read.1.tlog 2B
link.17604-cvtres.read.1.tlog 2B
link.9092-cvtres.read.1.tlog 2B
link.12884.write.1.tlog 2B
link.13932-cvtres.read.1.tlog 2B
link.7420-cvtres.read.1.tlog 2B
link.6580.read.1.tlog 2B
link.15064.write.1.tlog 2B
link-cvtres.read.1.tlog 2B
link.13788.read.1.tlog 2B
link.9092.write.1.tlog 2B
link.11984-cvtres.read.1.tlog 2B
link-cvtres.write.1.tlog 2B
link.17604.read.1.tlog 2B
link.7420-cvtres.write.1.tlog 2B
link.13788.write.1.tlog 2B
link.6548-cvtres.read.1.tlog 2B
link.17600-cvtres.write.1.tlog 2B
link.12884-cvtres.write.1.tlog 2B
link.6580-cvtres.read.1.tlog 2B
link.1948-cvtres.write.1.tlog 2B
link.13932-cvtres.write.1.tlog 2B
共 106 条
- 1
- 2
资源评论
a辰龙a
- 粉丝: 2780
- 资源: 59
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功