数据结构课设(工资管理系统)
PS:C语言,链表
在代码文件同级目录下会生成stdent.txt文件,存放保存的信息
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义一个学生信息存储结构体
typedef struct student
{
char no[12]; //学号
char name[40]; //姓名
int Chinese;
int math;
int English;
struct student* next;
}STU;
STU* LIstInit(STU* L);
STU* ListCreate(STU* L, int n);
void ListInsert(STU* L);
void ListDelete(STU* L, char n[40]);
void LIstSearch(STU* L, char n[]);
void input(STU* p, int i);
void output(STU* L);
void menu();
//创建表头,初始化链表:
STU* LIstInit(STU* L)
{
STU* head = NULL;
head = (STU*)malloc(sizeof(STU));
head->next = NULL;
L = head;
return L;
}
//创建一个链表并把节点插入到链表的表头:
STU* ListCreate(STU* L, int n)
{
int i;
for (i = 0; i < n; i++)
{
STU* p;
//将新生成的节点插入到链表中
p = NULL;
p = (STU*)malloc(sizeof(STU));
input(p, i);
p->next = L->next;
L->next = p;
}
return L;
}
//对学生信息的插入操作:
void ListInsert(STU* L)
{
STU* s = NULL;
//生成一个新节点s
s = (STU*)malloc(sizeof(STU));
printf("请输入您要插入的学生的学号:");
scanf("%s", &s->no);
printf("请输入您要插入的学生的姓名:");
scanf("%s", &s->name);
printf("请输入学生的各科成绩:");
scanf("%d", &s->Chinese);
scanf("%d", &s->math);
scanf("%d", &s->English);
s->next = L->next;
L->next = s;
}
//对学生信息的删除操作:
void ListDelete(STU* L, char n[])
{
STU* p = L->next, * pre = L;
if (p == NULL)
printf("无该学生信息!");
else
{
while (strcmp(p->name, n) != 0)
{
pre = p;
p = pre->next;
if (p == NULL)
{
printf("无该学生信息!\n");
return;
}
}
pre->next = p->next;
free(p);
printf("删除成功");
}
}
//对学生信息的查找操作:
void LIstSearch(STU* L, char n[])
{
STU* p = L->next;
if (p == NULL)
printf("数据为空,无法查找!");
else
{
while (strcmp(p->name, n) != 0)
{
p = p->next;
if (p == NULL)
{
printf("无该学生信息\n");
return;
}
}
printf("该学生的成绩为:\n");
printf("\tChinese:%d math:%d English:%d\n", p->Chinese,p->math,p->English);
}
}
//对学生信息的修改操作:
void ListModify(STU* L, char n[])
{
int a,b,c;
STU* p = L->next;
while (p != NULL)
{
if (strcmp(p->name, n) == 0)
{
printf("请选择您修改后的学生成绩:\n");
scanf("%d",&a);
p->Chinese=a;
scanf("%d",&b);
p->math=b;
scanf("%d",&c);
p->English=c;
break;
}
p = p->next;
}
}
//学生信息输入:
void input(STU* p, int i)
{
printf("请输入第%d名学生的学号:", i + 1);
scanf("%s", &p->no);
printf("请输入第%d名学生的姓名:", i + 1);
scanf("%s", &p->name);
printf("请输入第%d名学生的各科成绩(语文,数学,英语):", i + 1);
scanf("%d", &p->Chinese);
scanf("%d", &p->math);
scanf("%d", &p->English);
}
//学生信息输出
void output(STU* L)
{
STU* p = L->next;
while (p != NULL)
{
printf("%s\t\t", p->no);
printf("%s\t", p->name);
printf("\t%d", p->Chinese);
printf("\t\t%d", p->math);
printf("\t\t%d", p->English);
printf("\n");
p = p->next;
}
}
//打印
void PrintFile(STU* L)
{
STU* p = L->next;
FILE* fp;
fp = fopen("student.txt", "w");
fprintf(fp, "学号\t\t姓名\t\t语文\t\t数学\t\t英语\t\t\n");
while (p != NULL)
{
fprintf(fp, "%s\t", p->no);
fprintf(fp, "\t%s\t", p->name);
fprintf(fp, "\t%d", p->Chinese);
fprintf(fp, "\t\t%d", p->math);
fprintf(fp, "\t\t%d", p->English);
fprintf(fp, "\n");
p = p->next;
}
printf("保存成功,请到当前目录下的student.txt文件中查看");
fclose(fp);
}
//菜单函数
void menu()
{
printf("\t\t\t 学生成绩管理系统 \n");
printf("\t\t\t 1. 录入学生的成绩信息 \n");
printf("\t\t\t 2. 全部学生的成绩信息 \n");
printf("\t\t\t 3. 查找某个就学生的成绩 \n");
printf("\t\t\t 4. 修改某个学生的成绩 \n");
printf("\t\t\t 5. 删除某个学生的成绩信息 \n");
printf("\t\t\t 6. 插入某个学生的成绩信息 \n");
printf("\t\t\t 7. 保存学生信息 \n");
printf("\t\t\t 0. 退出管理系统 \n");
printf("\t\t\t 输入选项,按回车进入选项: \n");
}
//主函数
int main()
{
int item, n;
char nam[30];
STU* L = NULL;
L = LIstInit(L);
do
{
menu();
printf("请输入相应的数字,进行相应的操作:\n");
scanf("%d", &item);
switch (item)
{
case 1:
printf("请输入您要录入的学生人数:");
scanf("%d", &n);
L = ListCreate(L, n);
break;
case 2:
printf("全部学生信息如下:\n");
printf("学号\t\t姓名\t\t语文\t\t数学\t\t英语\t\t\n");
output(L);
break;
case 3:
printf("请输入您要查找的学生姓名:");
scanf("%s", nam);
LIstSearch(L, nam);
break;
case 4:
printf("请输入您要修改的学生姓名:");
scanf("%s", nam);
ListModify(L, nam);
break;
case 5:
printf("请输入您要删除的学生的姓名:");
scanf("%s", nam);
ListDelete(L, nam);
break;
case 6:
ListInsert(L);
break;
case 7:
PrintFile(L);
break;
case 0:
printf("退出学生成绩管理系统.....");
exit(0);
default:
break;
}
printf("\n\n\n\n");
} while (item);
return 0;
}