#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//链表结点结构体声明
typedef struct subjects
{
char name[20]
float score
}sub
typedef struct student
{
int num
char name[20]
sub subject[3]
struct student* next
}stu,*pstu
#define SIZE sizeof(stu)
//函数申明
pstu LoadInfo()
void PrintMenu()
pstu AddStu(pstu )
pstu DeleStu(pstu )
pstu RwrStu(pstu )
void FindStu(pstu , char )
void Count(pstu ,char * ,float ,float )
void Rank(pstu ,char * )
void SaveQuit(pstu )
//创建菜单,进入选择循环
while(1)
{
PrintMenu()
printf("请输入您的选择编号:")
scanf("%d",&n)
getchar()
switch(n)
{
case 1:
{
system("cls")
j=0
while(4!=j)
{
printf("欢迎进入信息管理版块!\n\n")
printf("\025 1、添加学生\n")
printf("\025 2、删除学生\n")
printf("\025 3、修改学生信息\n")
printf("\025 4、返回\n")
printf("请输入您的选择编号:\n")
scanf("%d",&j)
getchar()
if ( 1 == j) head = AddStu(head)
else if( 2 == j) head = DeleStu(head)
else if( 3 == j) head = RwrStu(head)
else if( 4 == j)
else printf("输入有误,请重新输入!\n")
}
case 2:
{
//信息查询
system("cls")
printf("欢迎进入信息查询版块!\n")
printf("请输入要查询的学生编号:")
scanf("%d",&j)
getchar()
//printf("%d\n",j) //检测输入是否成功,调试程序用
FindStu(head,j) //查询并输出
printf("\n请输入回车键返回主菜单!")
getchar()
system("cls")
break
}
扩展资料:
C语言包含的各种控制语句仅有9种,关键字也只有32 个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。
实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
参考资料来源:百度百科-c语言
不灭王朝码龄9年
关注
int menu(){
printf("请按提示输入完成操作!\n")
printf("1.查询员工信息\n")
printf("2.统计员工数量\n")
printf("3.录入员工信息\n")
printf("4.删除员工信息\n")
printf("5.按id排序所有员工\n")
printf("6.打印所有员工信息\n")
printf("7.退出系统\n")
return 0
}
如menu()函数所示,该系统一共有7个功能
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct emp{
int id
char name[50]
struct emp * next
// struct emp * prev
}
struct emp * initList()
struct emp * addListTailNode(struct emp * head)
struct emp * deleteListNode(struct emp * head,int id)
struct emp * searchEmp(struct emp * head,int id)
int printList(struct emp * l)
int printNode(struct emp * p)
struct emp * sortList(struct emp * head)
int getListLen(struct emp * head)
int writeToDisk(struct emp * head)
struct emp * readFromDisk()
int menu()
int usage(struct emp * head)
#include "emp.h"
int main(){
struct emp * head
head=readFromDisk()
usage(head)
return 0
}
struct emp * initList(){
struct emp * head
head=(struct emp *)malloc(sizeof(struct emp))
head->next=NULL
return head
}
struct emp * addListTailNode(struct emp * head){
int id
char name[50]
struct emp * p, * last , * check
last = head
while(last->next!=NULL){
last=last->next
}
printf("依次输入:员工id号,姓名!\n")
scanf("%d%s",&id,&name)
check = head
while(check!=last){ //遍历
check=check->next
if(id==check->id){
printf("添加失败!员工id号重复!\n")
return head
}
}
p=(struct emp *)malloc(sizeof(struct emp))
p->id=id
strcpy(p->name,name)
//
last->next=p
last=p
p->next=NULL
printf("%s员工信息已添加!\n",p->name)
return head
}
struct emp * deleteListNode(struct emp * head,int id){
struct emp * p,* q
p = head->next
while(p!=NULL){
if(p->next->id==id){
break
}
p=p->next
}
if(head->next==NULL){
printf("书籍信息为空!删除失败!\n")
}
else{
q = p->next
p->next = q->next
printf("%s书籍信息被删除!\n",q->name)
free(q)
}
return head
}
struct emp * searchEmp(struct emp * head,int id){//查询,返回节点信息
struct emp * p
p = head->next
while(p!=NULL){
if(p->id==id){
break
}
p=p->next
}
return p
}
int printNode(struct emp * p){//打印节点信息
if(p!=NULL){
printf("员工id: %d员工姓名:%s\n",p->id,p->name)
}
else{
printf("系统内无该员工信息!\n")
}
return 0
}
int printList(struct emp * head){ //打印整条链表
struct emp * p
p = head->next
while(p!=NULL){
printNode(p)
p=p->next
}
return 0
}
struct emp * sortList(struct emp * head){//排序
struct emp * p,* q
int temp_id
char temp_name[50]
for(p=head->nextp!=NULLp=p->next){
for(q=p->nextq!=NULLq=q->next){
if(p->id>q->id){
temp_id = q->id
q->id = p->id
p->id = temp_id
//
strcpy(temp_name,q->name)
strcpy(q->name,p->name)
strcpy(p->name,temp_name)
}
}
}
return head
}
int getListLen(struct emp * head){
int len=0
struct emp * p
p=head->next
while(p!=NULL){
len++
p=p->next
}
return len
}
int writeToDisk(struct emp * head){
FILE * fp
struct emp * p
if((fp = fopen("D:\\emp.hhtx", "w")) == 0){
printf("写入失败……!\n")
return 0
}
//
p=head->next
while(p!=NULL){
fwrite(p,sizeof(struct emp),1,fp)
printf("%d %s\n",p->id,p->name)
p=p->next
}
fclose(fp)
return 0
}
struct emp * readFromDisk(){
FILE * fp
struct emp * head,* last,* p,* temp
head = initList()
if((fp = fopen("D:\\emp.hhtx", "r")) == 0){
printf("加载失败……未找到存档数据!\n\n")
return head
}
//
last = head
p=(struct emp *)malloc(sizeof(struct emp))
while(p!=NULL){
p=(struct emp *)malloc(sizeof(struct emp))
fread(p,sizeof(struct emp),1,fp)
printf("读取数据: %d %s\n",p->id,p->name)
//
last->next=p
last=p
p=p->next
}
fclose(fp)
printf("系统数据初始化完成!")
return head
}
int menu(){
printf("请按提示输入完成操作!\n")
printf("1.查询员工信息\n")
printf("2.统计员工数量\n")
printf("3.录入员工信息\n")
printf("4.删除员工信息\n")
printf("5.按id排序所有员工\n")
printf("6.打印所有员工信息\n")
printf("7.退出系统\n")
return 0
}
int usage(struct emp * head){
int x,id
struct emp * p
menu()
while(1){
printf("请输入序列号:")
scanf("%d",&x)
switch(x){
case 1:
printf("输入所要查询的员工的id号:")
scanf("%d",&id)
p = searchEmp(head,id)
printNode(p)
printf("---------------------------------\n")
break
case 2:
printf("系统中一共存在%d个员工\n",getListLen(head))
break
case 3:
head=addListTailNode(head)
printf("---------------------------------\n")
break
case 4:
printf("输入所要删除的员工的id号:")
scanf("%d",&id)
head=deleteListNode(head,id)
printf("---------------------------------\n")
break
case 5:
printf("排序开始……\n")
head=sortList(head)
printf("排序已完成!\n")
printf("---------------------------------\n")
break
case 6:
printList(head)
printf("------
#include<stdio.h>#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#define LEN sizeof(struct student)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n"
#define DATA stu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum
struct student/*定义学生成绩结构体*/
{ int num/*学号*/
char name[15]/*姓名*/
double elec/*选修课*/
double expe/*实验课*/
double requ/*必修课*/
double sum/*总分*/
}
struct student stu[50]/*定义结构体数组*/
void in()/*录入学生成绩信息*/
void show()/*显示学生信息*/
void order()/*按总分排序*/
void del()/*删除学生成绩信息*/
void modify()/*修改学生成绩信息*/
void menu()/*主菜单*/
void insert()/*插入学生信息*/
void total()/*计算总人数*/
void search()/*查找学生信息*/
void save()/*保存函数*/
void open()/*打开函数*/
void main()/*主函数*/
{ int n
menu()
scanf("%d",&n)/*输入选择功能的编号*/
while(n)
{ switch(n)
{ case 1: in()break
case 2: search()break
case 3: del()break
case 4: modify()break
case 5: insert()break
case 6: order()break
case 7: total()break
case 8: save()break
case 9: open()break
default:break
}
getch()
menu()/*执行完功能再次显示菜单界面*/
scanf("%d",&n)
}
}
void in()/*录入学生信息*/
{ int i,m=0/*m是记录的条数*/
char ch[2]
FILE *fp/*定义文件指针*/
if((fp=fopen("data.txt","a+"))==NULL)/*打开指定文件*/
{ printf("无法打开\n")return}
while(!feof(fp)) {
if(fread(&stu[m] ,LEN,1,fp)==1)
m++/*统计当前记录条数*/
}
fclose(fp)
if(m==0)
printf("没有记录!\n")
else
{
system("cls")
show()/*调用show函数,显示原有信息*/
}
if((fp=fopen("data.txt","wb"))==NULL)
{ printf("无法打开\n")return}
for(i=0i<mi++) fwrite(&stu[i] ,LEN,1,fp)/*向指定的磁盘文件写入信息*/
printf("确认输入:(Y/N):")
scanf("%s",ch)
while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/
{
printf("学号:")scanf("%d",&stu[m].num)/*输入学生学号*/
for(i=0i<mi++)
if(stu[i].num==stu[m].num)
{
printf("学号存在,输入任意键继续!")
getch()
fclose(fp)
return
}
printf("姓名:")scanf("%s",stu[m].name)/*输入学生姓名*/
printf("选修课:")scanf("%lf",&stu[m].elec)/*输入选修课成绩*/
printf("实验课:")scanf("%lf",&stu[m].expe)/*输入实验课成绩*/
printf("必修课:")scanf("%lf",&stu[m].requ)/*输入必修课成绩*/
stu[m].sum=stu[m].elec+stu[m].expe+stu[m].requ/*计算出总成绩*/
if(fwrite(&stu[m],LEN,1,fp)!=1)/*将新录入的信息写入指定的磁盘文件*/
{ printf("无法保存!")getch()}
else { printf("%s 保持成功!\n",stu[m].name)m++}
printf("继续?(Y/N):")/*询问是否继续*/
scanf("%s",ch)
}
fclose(fp)
printf("OK!\n")
}
void show()
{ FILE *fp
int i,m=0
fp=fopen("data.txt","rb")
while(!feof(fp))
{
if(fread(&stu[m] ,LEN,1,fp)==1)
m++
}
fclose(fp)
printf("学号姓名 选修课 实验课 必修课 总成绩\t\n")
for(i=0i<mi++)
{
printf(FORMAT,DATA)/*将信息按指定格式打印*/
}
}
void menu()/*自定义函数实现菜单功能*/
{
system("cls")
printf("\n\n\n\n\n")
printf("\t\t|-------------学生信息管理系统-----------by:zxl|\n")
printf("\t\t|\t 0. 退出|\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 8. 保存学生信息到磁盘 |\n")
printf("\t\t|\t 9. 打开学生信息从磁盘 |\n")
printf("\t\t|-----------------------------------------------|\n\n")
printf("\t\t\t选择(0-9):")
}
void order()/*自定义排序函数*/
{ FILE *fp
struct student t
int i=0,j=0,m=0
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("无法打开!\n")
return
}
while(!feof(fp))
if(fread(&stu[m] ,LEN,1,fp)==1)
m++
fclose(fp)
if(m==0)
{
printf("没有记录!\n")
return
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("无法打开\n")
return}
for(i=0i<m-1i++)
for(j=i+1j<mj++)/*双重循环实现成绩比较并交换*/
if(stu[i].sum<stu[j].sum)
{ t=stu[i]stu[i]=stu[j]stu[j]=t}
if((fp=fopen("data.txt","wb"))==NULL)
{ printf("无法打开\n")return}
for(i=0i<mi++)/*将重新排好序的内容重新写入指定的磁盘文件中*/
if(fwrite(&stu[i] ,LEN,1,fp)!=1)
{
printf("%s 无法保存!\n")
getch()
}
fclose(fp)
printf("保存成功!")
getch()
}
void del()/*自定义删除函数*/
{FILE *fp
int snum,i,j,m=0
char ch[2]
if((fp=fopen("data.txt","r+"))==NULL)
{ printf("无法打开\n")return}
while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++
fclose(fp)
if(m==0)
{
printf("没有记录!\n")
return
}
printf("请输入学号:")
scanf("%d",&snum)
for(i=0i<mi++)
if(snum==stu[i].num)
break
printf("找到学号,删除?(Y/N)")
scanf("%s",ch)
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/
for(j=ij<mj++)
stu[j]=stu[j+1]/*将后一个记录移到前一个记录的位置*/
m--/*记录的总个数减1*/
if((fp=fopen("data.txt","wb"))==NULL)
{ printf("无法打开\n")return}
for(j=0j<mj++)/*将更改后的记录重新写入指定的磁盘文件中*/
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{ printf("无法保存!\n")
getch()}
fclose(fp)
printf("删除成功!\n")
getch()
}
void search()/*自定义查找函数*/
{ FILE *fp
int snum,i,m=0
char ch[2]
if((fp=fopen("data.txt","rb"))==NULL)
{ printf("无法打开\n")return}
while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++
fclose(fp)
if(m==0) {printf("没有记录!\n")return}
printf("请输入学号:")
scanf("%d",&snum)
for(i=0i<mi++)
if(snum==stu[i].num)/*查找输入的学号是否在记录中*/
{ printf("找到学号,显示?(Y/N)")
scanf("%s",ch)
if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
{
printf("学号姓名 选修课 实验课 必修课 总成绩\t\n")
printf(FORMAT,DATA)/*将查找出的结果按指定格式输出*/
getch()
}break
}
if(i==m) printf("无法找到该学生!\n")/*未找到要查找的信息*/
}
void modify()/*自定义修改函数*/
{ FILE *fp
int i,j,m=0,snum
if((fp=fopen("data.txt","r+"))==NULL)
{ printf("无法打开\n")return}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1) m++
if(m==0) {printf("无记录!\n")
fclose(fp)
return
}
printf("请输入您要修改信息的学生的学号!\n")
scanf("%d",&snum)
for(i=0i<mi++)
if(snum==stu[i].num)/*检索记录中是否有要修改的信息*/
break
printf("找到学号,您可以修改!\n")
printf("姓名:")
scanf("%s",stu[i].name)/*输入名字*/
printf("选修课:")
scanf("%lf",&stu[i].elec)/*输入选修课成绩*/
printf("实验课:")
scanf("%lf",&stu[i].expe)/*输入实验课成绩*/
printf("必修课:")
scanf("%lf",&stu[i].requ)/*输入必修课成绩*/
stu[i].sum=stu[i].elec+stu[i].expe+stu[i].requ
if((fp=fopen("data.txt","wb"))==NULL)
{ printf("无法打开\n")return}
for(j=0j<mj++)/*将新修改的信息写入指定的磁盘文件中*/
if(fwrite(&stu[j] ,LEN,1,fp)!=1)
{ printf("无法保存!")getch()}
fclose(fp)
printf("修改成功!")
getch()
}
void insert()/*自定义插入函数*/
{ FILE *fp
int i,j,k,m=0,snum
if((fp=fopen("data.txt","r+"))==NULL)
{ printf("无法打开\n")return}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1) m++
if(m==0) {printf("无记录!\n")
fclose(fp)
getch()
return
}
printf("输入要插入的位置(学号):")
scanf("%d",&snum)/*输入要插入的位置*/
for(i=0i<mi++)
if(snum==stu[i].num)
break
for(j=m-1j>ij--)
stu[j+1]=stu[j]/*从最后一条记录开始均向后移一位*/
printf("现在请输入新信息.\n")
printf("学号:")
scanf("%d",&stu[i+1].num)
for(k=0k<mk++)
if(stu[k].num==stu[i+1].num)
{
printf("学号存在,按任意键继续!")
getch()
fclose(fp)
return
}
printf("姓名:")
scanf("%s",stu[i+1].name)
printf("选修课:")
scanf("%lf",&stu[i+1].elec)
printf("实验课:")
scanf("%lf",&stu[i+1].expe)
printf("必修课:")
scanf("%lf",&stu[i+1].requ)
stu[i+1].sum=stu[i+1].elec+stu[i+1].expe+stu[i+1].requ
if((fp=fopen("data.txt","wb"))==NULL)
{ printf("无法打开\n")return}
for(k=0k<=mk++)
if(fwrite(&stu[k] ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/
{ printf("无法保存!")getch()}
fclose(fp)
printf("插入成功!")
getch()
}
void total()
{ FILE *fp
int m=0
if((fp=fopen("data.txt","r+"))==NULL)
{ printf("无法打开\n")return}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++/*统计记录个数即学生个数*/
if(m==0) {printf("无记录!\n")fclose(fp)return}
printf("本班有%d个学生!\n",m)/*将统计的个数输出*/
show()
getch()
fclose(fp)
}
这个是成绩管理系统,可行?不过都差不多,课程设计这东西很简单的