
编写c语言代码,向系统输入要求,并且有输出部分。实现插入修改删除,输出学生数据,
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h> /*I/O函数*/
#include<stdlib.h> /*其它说明*/
#include<string.h> /*字符串函数*/
#define LEN 15 /* 学号和姓名最大字符数,实际请更改*/
#define N 50 /* 最大学生人数,实际请更改*/
int k = 1, n = 0, m = 0;/* n代表当前记录的学生人数*/
//函数声明
void readfile();
void seek();
void modify();
void insert();
void del();
void display();
void save();
void menu();
//结构体保存学生信息
struct student{
char StudentId[LEN+1];
char StudentName[LEN+1];
int StudentAge;
char StudentSex;
float score[3];
}stu[N];
//主函数
int main()
{
while (k)
{
menu();
}
system("pause");
return 0;
}
//系统帮助函数
void help()
{
printf("\n0.欢迎使用系统帮助!\n");
printf("\n1.初次进入系统后,请先选择增加学生信息;\n");
printf("\n2.按照菜单提示键入数字代号;\n");
printf("\n3.增加学生信息后,切记保存;\n");
printf("\n4.谢谢您的使用!\n");
}
//刷新文件
int flush(){
char filename[LEN + 1];
int i = 0;
printf("请输入要刷新学生信息的文件名:\n");
scanf("%s", filename);
int j = 0;
FILE * fp;
if ((fp = fopen(filename, "r")) == NULL) return 0;
//从文件读取信息
while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].StudentId, &stu[j].StudentName, &stu[j].StudentAge, &stu[j].StudentSex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) {
j++;
}
n = j;
printf("刷新成功!!!");
return n;
}
//查找学生信息
void seek() /*查找*/
{
int i, item, flag;
char s1[21]; /* 以姓名和学号最长长度+1为准*/
printf("------------------\n");
printf("-----1.按学号查询-----\n");
printf("-----2.按姓名查询-----\n");
printf("-----3.退出本菜单-----\n");
printf("------------------\n");
while (1)
{
printf("请选择子菜单编号:");
scanf("%d", &item);
flag = 0;
switch (item)
{
case 1:
printf("请输入要查询的学生的学号:\n");
scanf("%s", s1);
for (i = 0; i<n; i++)
if (strcmp(s1,stu[i].StudentId) == 0)
{
flag = 1;
printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t%d\t%6\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
if (0 == flag)
printf("该学号不存在!\n"); break;
case 2:
printf("请输入要查询的学生的姓名:\n");
scanf("%s", s1);
for (i = 0; i<n; i++)
if (strcmp(stu[i].StudentName, s1) == 0)
{
flag = 1;
printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n", stu[i].StudentId, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
if (0 == flag)
printf("该姓名不存在!\n"); break;
case 3:return;
default:printf("请在1-3之间选择\n");
}
}
}
//修改学生信息
void modify() /*修改信息*/
{
int i, item, num = -1;
char sex1, s1[LEN + 1], s2[LEN + 1]; /* 以姓名和学号最长长度+1为准*/
float score1;
printf("请输入要要修改的学生的学号:\n");
scanf("%s", s1);
for (i = 0; i < n; i++){
if (strcmp(stu[i].StudentId, s1) == 0){/*比较字符串是否相等*/
num = i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改性别\n");
printf("4.修改C语言成绩\n");
printf("5.修改高等数学成绩\n");
printf("6.修改大学英语成绩\n");
printf("7.退出本菜单\n");
printf("------------------\n");
while (1)
{
printf("请选择子菜单编号:");
scanf("%d", &item);
switch (item)
{
case 1:
printf("请输入新的姓名:\n");
scanf("%s", s2);
strcpy(stu[num].StudentName, s2);
break;
case 2:
printf("请输入新的年龄:\n");
scanf("%d", stu[num].StudentAge);
break;
case 3:
printf("请输入新的性别:\n");
scanf("%s", &sex1);
stu[i].StudentSex = sex1;
break;
case 4:
printf("请输入新的C语言成绩:\n");
scanf("%f", &score1);
stu[num].score[0] = score1;
break;
case 5:
printf("请输入新的高等数学成绩:\n");
scanf("%f", &score1);
stu[num].score[1] = score1;
break;
case 6:
printf("请输入新的大学英语成绩:\n");
scanf("%f", &score1);
stu[num].score[2] = score1;
break;
case 7: return;
default:printf("请在1-7之间选择\n");
}
}
printf("修改完毕!请及时保存!\n");
}
else{
printf("没有该学生学号!!!");
}
}
}
void sort()//按学号排序
{
int i, j, k, *p, *q, s;
char temp[LEN + 1], ctemp;
float ftemp;
for (i = 0; i<n - 1; i++)
{
for (j = n - 1; j>i; j--)
if (strcmp(stu[j - 1].StudentId, stu[j].StudentId)>0)
{
strcpy(temp, stu[j - 1].StudentId);
strcpy(stu[j - 1].StudentId, stu[j].StudentId);
strcpy(stu[j].StudentId, temp);
strcpy(temp, stu[j - 1].StudentName);
strcpy(stu[j - 1].StudentName, stu[j].StudentName);
strcpy(stu[j].StudentName, temp);
ctemp = stu[j - 1].StudentSex;
stu[j - 1].StudentSex = stu[j].StudentSex;
stu[j].StudentSex = ctemp;
p = &stu[j - 1].StudentAge;
q = &stu[j].StudentAge;
s = *q;
*q = *p;
*p = s;
for (k = 0; k<3; k++)
{
ftemp = stu[j - 1].score[k];
stu[j - 1].score[k] = stu[j].score[k];
stu[j].score[k] = ftemp;
}
}
}
}
//添加学生信息函数
void insert() /*插入函数*/
{
int i = n, j, flag;
printf("请输入待增加的学生数:\n");
scanf("%d", &m);
if (m > 0){
do
{
flag = 1;
while (flag)
{
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>>
https://vip.csdn.net/askvip?utm_source=1146287632
#include<stdio.h>
#include<stdlib.h>
#include<string.h>//需要用到strcmp函数
#define LEN 15//姓名和学号的最大字符数
#define N 50//最大学生人数
int n = 0, t = 1;//n代表当前学生人数,t用来控制整个程序的执行,以及程序的退出;
//函数声明
void menu();//主菜单函数
void help();//使用帮助
void increase();//增加学生信息
void seek();//查找学生信息
void de();//删除学生信息
void save();//保存文件
void present();//显示当前信息
void modify();//修改学生信息
void flush();//刷新学生成绩
void tuichu();//退出函数
struct student
{
char StuID[LEN];//学生学号
char Stuname[LEN];
int Stuage;
char Stusex;
float score[3]; //各科成绩
}stu[N];
int main()
{
int num;//num是菜单选项
while (t)//t是全局变量,用tuichu函数来控制循环是否继续
{
menu();//输出主菜单界面
printf("您好,请输入菜单编号:");
scanf("%d", &num);
switch (num)
{
case 1: help(); break;
case 2: increase(); break;
case 3: seek(); break;
case 4: de(); break;
case 5: save(); break;
case 6: present(); break;
case 7: modify(); break;
case 8: flush(); break;
case 9: tuichu(); break;
default:printf("输入有误,请重新输入!");
}
}
system("pause");
return 0;
}
void menu()
{
printf("\n\n");
printf("*****************************************************\n");
printf("*----------------------duoduo------------------------\n");
printf("* 学生信息管理系统 *\n");
printf("*****************************************************\n");
printf("********************系统功能菜单*********************\n");
printf("---------------------- --------------------------\n");
printf("*****************************************************\n");
printf("** 1、使用帮助 * 2、增加学生信息 **\n");
printf("*****************************************************\n");
printf("** 3、查询学生信息 * 4、删除学生信息 **\n");
printf("*****************************************************\n");
printf("** 5、保存当前信息 * 6、显示当前信息 **\n");
printf("*****************************************************\n");
printf("** 7、修改学生信息 * 8、刷新学生信息 **\n");
printf("*****************************************************\n");
printf("** 9、退出系统 * **\n");
printf("************************* \n");
printf("---------------------- --------------------------\n");
}
void help()
{
printf("\n这是一个学生信息管理系统,为了帮助您更快的了解使用它,请先仔细阅读以下注意事项:\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、在添加学生时,用两个字符代表不同的性别,比如男用‘M’代替,女用‘W’代替!\n");
printf("\n 7、保存或者刷新时,输入的文件名后缀请使用.txt,比如: stu.txt,系统会在源程序\n");
printf("\n “学生管理系统.exe”的相同目录建立一个.txt文件来保存学生信息,您可以查看\n");
printf("\n 该文件,但非专业人员不要轻易改动,否则会造成刷新数据异常或刷新失败!\n");
printf("\n 8、学生信息包括:姓名、学号、性别、年龄、C语言成绩、高数成绩、英语成绩等!\n");
printf("\n 9、使用遇到任何问题请与我们联系,邮箱:ouyang_na_na@163.com\n");
printf("\n 10、最后感谢您的使用!\n");
system("pause");
}
void increase()
{
int i = n, j, flag, m = 0;//i代表增加学生信息过程中任意时刻的学生人数
printf("\n请输入待增加的学生人数:\n");
scanf("%d", &m);
if (m > 0) {
do {
flag = 1;
while (flag)
{
flag = 0;
printf("请输入第%d位学生的学号:\n", i + 1);//第几位学生从1开始计数,而stu[]从零开始,需要加1
scanf("%s", stu[i].StuID);
//判断学号是否重复
for (j = 0; j < i; j++) {
if (strcmp(stu[i].StuID, stu[j].StuID) == 0) {
printf("该学号已经存在,请重新输入!\n");
flag = 1;
break;
}
}
}
printf("请输入第%d位学生姓名:\n", i + 1);
scanf("%s", stu[i].Stuname);
printf("请输入第%d位学生年龄:\n", i + 1);
scanf("%d", &stu[i].Stuage);
getchar();//处理上面输入的换行符,不然系统会把换行符当做一个字符赋值给性别
printf("请输入第%d位学生性别:\n", i + 1);
scanf("%c", &stu[i].Stusex);
printf("请输入第%d位学生的C语言成绩:\n", i + 1);
scanf("%f", &stu[i].score[0]);
printf("请输入第%d位学生的高数成绩:\n", i + 1);
scanf("%f", &stu[i].score[1]);
printf("请输入第%d位学生的大学英语成绩:\n", i + 1);
scanf("%f", &stu[i].score[2]);
i++;
} while (i < n + m);//只要当前学生人数还没到达添加后的总人数,就得继续添加
}
n += m;// 添加完成,系统人数n的值也要增加
printf("添加完成!!!\n");
system("pause");
}
void seek()
{
int i, num, flag;
char s1[LEN + 1];
printf("*****************************\n");
printf("**-------1.按学号查询------**\n");
printf("**-------2.按姓名查询------**\n");
printf("**-------3.退出本菜单------**\n");
printf("*****************************\n");
while (1)
{
flag = 0;
printf("请输入子菜单:");
scanf("%d", &num);
switch (num)
{
case 1:
printf("请输入需要查找学生的学号:\n");
scanf("%s", s1);
for (i = 0; i < n; i++)
{
if (strcmp(stu[i].StuID, s1) == 0)
{
flag = 1;
printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");
printf("%s\t\t%s\t\t%c\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].StuID, stu[i].Stuname, stu[i].Stusex, stu[i].Stuage, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}break;
case 2:
printf("请输入需要查找学生的姓名:\n");
scanf("%s", s1);
for (i = 0; i < n; i++)
{
if (strcmp(stu[i].Stuname, s1) == 0)
{
flag = 1;
printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");
printf("%s\t\t%s\t\t%c\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].StuID, stu[i].Stuname, stu[i].Stusex, stu[i].Stuage, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}break;
case 3: return;
default: printf("请在1--3之间输入\n");
}
if (flag == 0)
printf("找不到该学生!\n请重新输入!");
}
}
void de()
{
int i, j, flag;
char s1[LEN];
printf("请输入需要删除的学生学号:\n");
scanf("%s", s1);
flag = 0;
for (i = 0; i < n; i++)
{
if (strcmp(s1, stu[i].StuID) == 0)
{
flag = 1;
for (j = i; j < n - 1; j++)
{
stu[j] = stu[j + 1];//直接把后面的学生都往前移动一位
}
}
if (flag == 1) break;//说明已经找到了需要删除的学生,结束循环
}
if (0 == flag)
{
printf("该学号不存在!!!\n");
}
if (1 == flag)
{
printf("删除成功\n");
n--;
}
system("pause");
}
void save()//把学生信息保存到文件
{
int i;
FILE* fp;
char filename[LEN + 1];
printf("请输入要保存的文件名:\n");
scanf("%s", filename);
if ((fp = fopen(filename, "w")) == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
for (i = 0; i < n; i++)
if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1)
printf("保存失败!!\n");
printf("保存成功!!!\n");
fclose(fp);
system("pause");
}
void present()
{
int i;
if (n == 0)
{
printf("您好,现在没有学生信息,请先增加学生信息或者刷新再来试试!\n");
}
else
{
printf("现在共有%d名学生:\n", n);
printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");
for (i = 0; i < n; i++)
{
printf("%s\t\t%s\t\t%c\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].StuID, stu[i].Stuname, stu[i].Stusex, stu[i].Stuage, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}
system("pause");
}
void modify()
{
int i, flag;
char ID[LEN], name[LEN], sex;
int age;
float score;
printf("请输入需要修改的学生姓名:\n");
getchar();
gets(name);
while (1)
{
flag = 0;
for (i = 0; i < n; i++)
{
if (strcmp(name, stu[i].Stuname) == 0)
{
flag = 1;
int num;//用于switch函数的子菜单
printf("***************************************************\n");
printf("*----1.修改学号-------- - -----2.修改性别-------*\n");
printf("*----3.修改年龄-------- - -----4.修改C语言成绩--*\n");
printf("*----5.修改高数成绩---- - -----6.修改英语成绩---*\n");
printf("*-------------------7.退出本菜单------------------*\n");
printf("***************************************************\n\n");
printf("请输入子菜单:");
scanf("%d", &num);
switch (num)
{
case 1:
printf("请输入新的学号:\n");
getchar();
gets(ID);
strcpy(stu[i].StuID, ID); break;
case 2:
getchar();
printf("请输入新的性别:\n");
scanf("%c", &sex);
stu[i].Stusex = sex; break;
case 3:
printf("请输入新的年龄:\n");
scanf("%d", &age);
stu[i].Stuage = age; break;
case 4:
printf("请输入新的C语言成绩:\n");
scanf("%f", &score);
stu[i].score[0] = score; break;
case 5:
printf("请输入新的高数成绩:\n");
scanf("%f", &score);
stu[i].score[1] = score; break;
case 6:
printf("请输入新的英语成绩:\n");
scanf("%f", &score);
stu[i].score[2] = score; break;
case 7:
return; break;
default:
printf("请在1--7之间选择!\n");
}
if (num > 0 && num < 7)
printf("修改成功,记得保存哟!!!\n");
break;//找到学生,结束循环;
}
}
if (flag == 0)
{
printf("没有找到该学生,请重新输入需要修改信息的学生姓名:\n");
gets(name);
}
}
system("pause");
}
void flush()
{
int i, k = 0;//k代表刷新过程中学生人数
FILE* fp;
char filename[LEN + 1];
printf("请输入需要刷新的文件名:\n");
getchar();
gets(filename);
if ((fp = fopen(filename, "r")) == NULL)//打开文件
{
printf("打开文件失败!\n");
exit(0);
}
for (i = 0; i < N; i++)//N是最大的学生人数,可在程序开头进行更改
{
if (fread(&stu[i], sizeof(struct student), 1, fp) == 1)
k++;//记录学生人数
}
n = k;// 把k的值给n
if (k == 0)
printf("刷新失败!!!\n");
else
printf("刷新成功!!!\n");
fclose(fp);
system("pause");
}
void tuichu()
{
int h;//控制是否确认退出
printf("即将退出,确认请按1,取消请按0\n");
scanf("%d", &h);
if (h == 1)
{
t = 0;//t是main函数中while函数是否继续执行的控制条件,是一个全局变量,程序开头已经定义并且赋值位 1
printf("成功退出,感谢使用!\n");
}
if (h == 0)
{
printf("退出已取消!\n");
system("pause");
}
}